2010-08-09 103 views
2

好吧,这是一个比其他任何更健康检查。使用独特的动态变量名称(不是变量值!)

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

但是,只有一个办法(我想?)创建一个新的状态,那就是如下:

lua_State *S = lewL_newstate(); 

现在我需要一些方法来动态地改变“S”来..随你。例如:如果我有4个lua文件,并且我想将它们加载到它们自己的lua_State中,我会调用:lua_State * A = lewL_newstate(); lua_state *首先,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; 

但我仍然有实际问题generatin g(缺少更好的单词)每个int-index的变量名称。

那么,我喝了太多咖啡吗?有没有明显的解决方案,或者我应该停止编码直到疯狂的打击?

在此先感谢。

+3

有什么错误使用(指针)'lua_state'组成的数组/矢量? – 2010-08-09 16:04:29

+3

*为什么*你需要唯一的变量名?矢量不够好吗? – schot 2010-08-09 16:05:03

+0

问题不在于存储状态,问题在于根据要加载的lua文件的数量组成状态变量名称。 so 2 files =我如何得到2个独特的变量名来调用这些新的状态?它有点不知道我需要多少个变量名(状态)。所以我无法事先创建它们。 – Karrok 2010-08-09 16:33:59

回答

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]; 
} 
2

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

1

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

0

GiNaC做到这一点,但名字已被明确地给一个变量