2009-01-17 8 views

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

  1. Copier la carte dans une nouvelle table Lua, et passer la table Lua.

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

+0

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

+0

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