Domanda

In C ++, ho un map<string, string>, contenente un numero sconosciuto di voci. Come posso passare questo a una funzione Lua, in modo che la funzione Lua possa usare i dati come tabella?

È stato utile?

Soluzione

se vuoi una vera tabella 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 i tipi giusti per la tua mappa sostituiti in ..

Altri suggerimenti

Un paio di opzioni ...

  1. Copia la mappa in una nuova tabella Lua e passa la tabella Lua.

  2. Crea una tabella proxy che indirizza le letture e le scritture attraverso __index e __newindex metametodi

Lo svantaggio di (1) è tutta la copia, ovviamente.

Lo svantaggio di (2) è che pairs() non funzionerà sulla tabella proxy

Una discussione sulle correzioni di Lua per pairs generalizzate è nel wiki e < a href = "http://lua-users.org/lists/lua-l/2007-02/msg00423.html" rel = "nofollow noreferrer"> questo thread della mailing list . <=> è previsto per Lua 5.2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top