Come posso creare una tabella Lua in C ++ e passarla a una funzione Lua?
Domanda
In C ++, ho un map<string, string>
, contenente un numero sconosciuto di voci. Come posso passare questo a una funzione Lua, in modo che la funzione Lua possa usare i dati come tabella?
Soluzione
se vuoi una vera tabella 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);
}
con i tipi giusti per la tua mappa sostituiti in ..
Altri suggerimenti
Un paio di opzioni ...
-
Copia la mappa in una nuova tabella Lua e passa la tabella Lua.
-
Crea una tabella proxy che indirizza le letture e le scritture attraverso
__index
e__newindex
metametodi
Lo svantaggio di (1) è tutta la copia, ovviamente.
Lo svantaggio di (2) è che pairs()
non funzionerà sulla tabella proxy
Una discussione sulle correzioni di Lua per pairs
generalizzate è nel wiki e < a href = "http://lua-users.org/lists/lua-l/2007-02/msg00423.html" rel = "nofollow noreferrer"> questo thread della mailing list . <=> è previsto per Lua 5.2