2010-08-09 99 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做到這一點,但名字已被明確地給一個變量