好的,这比其他任何事都更加健全。
假设我们有一个名为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实际生成(缺少更好的单词)变量名的问题。
那么,我喝过多咖啡,是否有一个明显的解决方案可以解决我想做的事情,或者我应该停止编码直到疯狂的打击?
提前致谢。
答案 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执行此操作,但必须将名称明确赋予变量