Como faço para criar uma tabela Lua em C ++, e passá-lo para uma função Lua?
Pergunta
Em C ++, eu tenho um map<string, string>
, contendo um número desconhecido de entradas. Como posso passar isso para uma função Lua, de modo que a função Lua pode usar os dados como uma tabela?
Solução
Se você quer uma tabela lua real:
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);
}
com os tipos certos para o seu mapa substituídos em ..
Outras dicas
Opções casal um ...
-
Copiar o mapa em uma nova tabela Lua, e passar a tabela Lua.
-
Criar um tabela de proxy que dirige leituras e gravações através de um de metatabela
__index
e__newindex
metamétodos
A desvantagem (1) é toda a cópia, é claro.
A desvantagem (2) é que pairs()
não vai funcionar na mesa de proxy
A discussão de correções para Lua para pairs
generalizada é no wiki e esta mailing list fio . pairs
generalizada é esperado para Lua 5.2