En C++, j'ai un map<string, string>
, contenant un nombre inconnu d'entrées. Comment est-ce que je peux passer ceci à une fonction de Lua, de sorte que la fonction de Lua puisse employer les données comme table?Comment créer une table Lua en C++ et la passer à une fonction Lua?
9
A
Répondre
18
si vous voulez une vraie table de 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 en ..
5
A couple d'options ...
Copier la carte dans une nouvelle table Lua, et passer la table Lua.
Créer une proxy table qui dirige lit et écrit par un
__index
de MetaTable et__newindex
les métaméthodes
L'inconvénient (1) est tout la copie, bien sûr.
L'inconvénient (2) est que pairs()
ne fonctionnera pas sur la table proxy
Une discussion de corrections à Lua pour pairs
généralisée est in the wiki et this mailing list thread. Généralisée pairs
devrait pour Lua 5.2
Il ne devrait pas être trop difficile d'ajouter un itérateur fonction à la métatable qui peut être utilisé tout comme les paires() pour les tables. –
Je fais habituellement l'option 2; à moins que la table soit petite et qu'il y ait beaucoup de demandes à une table en lecture seule. – Javier