2009-01-17 8 views

Antwort

18

, wenn Sie eine echte lua Tabelle wollen:

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); 
} 

mit den richtigen Typen für die Karte ersetzt in ..

5

Ein paar Optionen ...

  1. Kopieren Sie die Karte in eine neue Lua-Tabelle und die Lua-Tabelle übergeben.

  2. eine proxy table erstellen, die

Der Nachteil (1) alle Vervielfältigung, natürlich durch einen Metatabelle des __index und __newindex metamethods liest und schreibt leitet.

Der Nachteil (2) besteht darin, dass pairs() auf der Proxy-Tabelle

Eine Diskussion über Korrekturen an Lua für verallgemeinern pairs ist in the wiki und this mailing list thread nicht funktionieren. Generalized pairs wird erwartet, dass für Lua 5.2

+0

Es sollte nicht allzu schwierig sein, einen Iterator hinzufügen Funktion für die Metatabelle, die genau wie pairs() für Tabellen verwendet werden kann. –

+0

ich mache normalerweise Option 2; es sei denn, die Tabelle ist klein und es gibt viele Anfragen an eine meist schreibgeschützte Tabelle. – Javier