C ++에서 LUA 테이블을 어떻게 만들고 LUA 기능으로 전달합니까?
문제
C ++에는 a가 있습니다 map<string, string>
, 알 수없는 수의 항목을 포함합니다. LUA 함수가 데이터를 테이블로 사용할 수 있도록 LUA 함수로이를 전달하려면 어떻게해야합니까?
해결책
실제 LUA 테이블을 원한다면 :
lua_newtable(L);
int top = lua_gettop(L);
for (std::map::iterator it = mymap.begin(); it != mymap.end(); ++it) {
const char* key = it->first.c_str();
const char* value = it->second.c_str();
lua_pushlstring(L, key, it->first.size());
lua_pushlstring(L, value, it->second.size());
lua_settable(L, top);
}
지도에 적합한 유형이 대체되었습니다.
다른 팁
몇 가지 옵션 ...
지도를 새 LUA 테이블에 복사하고 LUA 테이블을 전달하십시오.
a 프록시 테이블 그것은 중식 가능한 말을 통해 읽고 글을 지시합니다
__index
그리고__newindex
메타 메트 드
(1)에 대한 단점은 물론 모든 복사입니다.
(2)에 대한 단점은 그 것입니다 pairs()
프록시 테이블에서는 작동하지 않습니다
일반화를 위해 LUA에 대한 수정에 대한 논의 pairs
~이다 위키에서 그리고 이 메일 링리스트 스레드. 일반화 pairs
예상됩니다 루아 5.2
제휴하지 않습니다 StackOverflow