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?

Était-ce utile?

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 ...

  1. Copiez la carte dans une nouvelle table Lua et transmettez-la.

  2. 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

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top