Comment créer une table Lua en C ++ et le transmettre à une fonction Lua?
Question
En C ++, j'ai un map<string, string>
, contenant un nombre inconnu d'entrées. Comment puis-je le transmettre à une fonction Lua, de sorte que cette dernière puisse utiliser les données sous forme de tableau?
La solution
si vous voulez une vraie table 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);
}
avec les bons types pour votre carte substitués dans ..
Autres conseils
Quelques options ...
-
Copiez la carte dans une nouvelle table Lua et transmettez-la.
-
Créer une table proxy qui dirige les lectures et les écritures à travers un métatable
__index
et__newindex
metamethods
L’inconvénient de (1) est bien entendu la totalité de la copie.
L’inconvénient de (2) est que pairs()
ne fonctionnera pas sur la table proxy
Une discussion sur les correctifs généralisés à Lua pairs
est dans le wiki et < a href = "http://lua-users.org/lists/lua-l/2007-02/msg00423.html" rel = "nofollow noreferrer"> ce fil de la liste de diffusion . Un généralisé <=> est attendu pour Lua 5.2