【问题标题】:Using unique dynamic variable names (not variable values!)使用唯一的动态变量名(不是变量值!)
【发布时间】:2011-03-27 09:25:24
【问题描述】:

好吧,这更像是一个健全性检查。

假设我们有一个名为 lua_State 的结构,现在我需要创建不确定数量的唯一 lua_State。为了确保我不会两次使用相同的变量名,我需要有某种方法来在每次创建新状态时获取一个唯一变量。

但是,只有一种方法(我认为?)来创建新状态,如下所示:

lua_State *S = lewL_newstate();

现在我需要一些方法来动态地将“S”更改为……随便什么。

例如:如果我有 4 个 lua 文件,并且我想将每个文件加载到它们自己的 lua_State 中,我会调用:lua_State *A = lewL_newstate();首先,lua_State *B = lewL_newstate();第二个,依此类推。请记住,lua 文件的数量会有所不同,因此创建固定数量的状态可能不会很好。

我该怎么做呢?

澄清:

.h

struct lua_State

.cpp

createNewState(Lua_State* something){
 lua_State* something = luaL_newstate();
}

我想过创建一个

std::map<int, lua_State*> luaMap;

但是我仍然会遇到为每个 int-index 实际生成(因为没有更好的词)变量名的问题。

那么,我是不是喝了太多咖啡,是否有一个显而易见的简单解决方案可以解决我正在尝试做的事情,还是应该停止编码,直到疯狂结束?

提前致谢。

【问题讨论】:

  • 使用(指向)lua_states 的数组/向量有什么问题吗?
  • 为什么你需要唯一的变量名?向量不够好吗?
  • 问题不在于存储状态,问题在于根据要加载的 lua 文件数量组成状态变量名称。所以 2 个文件 = 我如何获得 2 个唯一的变量名来调用这些新状态?有点意思是我不知道我需要多少个变量名(状态)。所以我不能事先创建它们。
  • 当你的程序运行时,代码已经被编译了,所以在你的程序中添加新的 C++ 变量已经太迟了,因此担心这些变量的名称是没有意义的。您当然可以将名称与您正在加载的文件相关联(如 Reko 的回答),但它们不能是 变量

标签: c++ lua


【解决方案1】:

您不能使用std::map&lt;std::string, lua_State*&gt; 并使用脚本名称作为状态索引吗?

【讨论】:

    【解决方案2】:

    为什么每个索引都需要一个变量名?为什么引用例如luaMap[0]luaMap[1] 不够好?我不认为真的有任何方法可以做你想做的事。您需要某种动态数组,例如 std::vector。

    【讨论】:

      【解决方案3】:

      使用std::vector 来存储创建的状态并生成顺序标识符(即数组索引)。除非我遗漏了什么,否则您的要求过于复杂。

      std::vector<lua_State *> stateList;
      
      // create a new Lua state and return it's ID number
      int newLuaState()
      {
          stateList.push_back(luaL_newstate());
          return stateList.size() - 1;
      }
      
      // retrieve a Lua state by its ID number
      lua_State * getLuaState(int id)
      {
          assert(0 <= id && stateList.size() > id);
          return stateList[id];
      }
      

      【讨论】:

        【解决方案4】:

        GiNaC 会这样做,但名称必须明确指定给变量

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-18
          • 2019-06-08
          • 2018-05-06
          • 1970-01-01
          • 2011-07-13
          • 2021-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多