In C++ habe ich eine map<string, string>
, die eine unbekannte Anzahl von Einträgen enthält. Wie kann ich dies an eine Lua-Funktion übergeben, damit die Lua-Funktion die Daten als Tabelle verwenden kann?Wie erstelle ich eine Lua-Tabelle in C++ und übergebe sie an eine Lua-Funktion?
9
A
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 ...
Kopieren Sie die Karte in eine neue Lua-Tabelle und die Lua-Tabelle übergeben.
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
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. –
ich mache normalerweise Option 2; es sei denn, die Tabelle ist klein und es gibt viele Anfragen an eine meist schreibgeschützte Tabelle. – Javier