2009-01-17 14 views

Respuesta

18

si quieres una verdadera mesa 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); 
} 

con el tipo correcto para su mapa sustituidos en ..

5

un par de opciones ...

  1. Copiar el mapa en una nueva tabla Lua, y pasan la tabla Lua.

  2. Crear una proxy table que dirige lee y escribe a través __index y __newindex metamétodos de metatabla

El inconveniente de (1) es toda la copia, por supuesto.

El inconveniente de (2) es que pairs() no funcionará en la tabla proxy

Una discusión de correcciones para Lua para generalizada pairs es in the wiki y this mailing list thread. Se espera generalizada pairs para Lua 5.2

+0

No debería ser demasiado difícil añadir un iterador función para la metatabla que se puede usar como pares() para tablas. –

+0

usualmente hago la opción 2; a menos que la mesa sea pequeña y haya muchas solicitudes en una mesa que solo sea de lectura. – Javier