2010-08-09 3 views
2

그래, 이것은 다른 것보다 더 위생 검사입니다.변수 값이 아닌 고유 한 동적 변수 이름을 사용하십시오.

우리는 lua_State라는 구조체를 가지고 있습니다. 이제는 불확실한 양의 고유 한 lua_State를 생성해야합니다. 동일한 변수 이름을 두 번 사용하지 않도록하려면 새 상태를 만들 때마다 고유 한 변수를 얻는 방법이 필요합니다.

그러나 새로운 상태를 만들 수있는 유일한 방법 (? 내 생각)가, 다음과 같이 즉 :

lua_State *S = lewL_newstate(); 

가 지금은 동적으로 "S"그로 변경하는 방법이 필요 것입니다 .. 도대체 무엇이.

예 : 4 개의 lua 파일이 있고 각각의 lua_State에로드하려면 lua_State * A = lewL_newstate(); 처음에는 lua_State * B = lewL_newstate(); 두 번째 등등. 루아 파일의 수는 다양하므로 고정 된 수의 상태를 만들면 아마 잘되지 않을 것입니다.

어떻게해야합니까?

설명 :

.H

struct lua_State 

통화 당

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

은 내가

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

를 만드는 방법에 대해 생각하지만 난 여전히 사실의 문제가있는 것 생성 g (더 나은 단어가 부족한 경우) 모든 int-index에 대한 변수 이름.

그래서 커피를 너무 많이 마시고 내가하는 일에 대한 눈에 띄게 단순한 해결책이 있습니까? 아니면 미친 듯이 불 때까지 코딩을 중단해야합니까?

미리 감사드립니다.

+3

에게 제공 할 수있다? –

+3

* 왜 * 고유 한 변수 이름이 필요합니까? 벡터가 충분하지 않습니까? – schot

+0

문제는 상태를 저장하는 것이 아니며 문제는로드 할 lua 파일의 수에 따라 상태 변수 이름을 구성합니다. 그래서 2 개의 파일 =이 새로운 상태를 호출하기 위해 2 개의 고유 한 변수 이름을 얻으려면 어떻게해야합니까? 그것은 내가 필요한 변수 이름 (상태)이 얼마나 많은지 알지 못한다는 점입니다. 그래서 나는 그것을 미리 만들 수 없습니다. – Karrok

답변

3

std::vector을 사용하면 생성 된 상태를 저장하고 순차적 식별자 (즉, 배열 인덱스)를 생성 할 수 있습니다. 내가 뭔가를 놓치지 않는 한, 당신은 당신의 요구 사항을 지나치게 복잡하게 만듭니다. (포인터에)`lua_state`의의 배열/벡터를 사용에 문제가

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이 작업을 수행하지만, 이름은 명시 적으로 변수