使用唯一的动态变量名称(不是变量值!)

时间:2010-08-09 16:00:40

标签: c++ lua

好的,这比其他任何事都更加健全。

假设我们有一个名为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实际生成(缺少更好的单词)变量名的问题。

那么,我喝过多咖啡,是否有一个明显的解决方案可以解决我想做的事情,或者我应该停止编码直到疯狂的打击?

提前致谢。

4 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:2)

您不能使用std::map<std::string, lua_State*>并使用脚本名称作为状态的索引吗?

答案 2 :(得分:1)

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

答案 3 :(得分:0)

GiNaC执行此操作,但必须将名称明确赋予变量