W C++, mam map<string, string>
, zawierający nieznaną liczbę wpisów. Jak mogę przekazać to do funkcji Lua, aby funkcja Lua mogła używać danych jako tabeli?Jak utworzyć tabelę Lua w C++ i przekazać ją do funkcji Lua?
9
A
Odpowiedz
18
jeśli chcesz prawdziwego stołu 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);
}
z odpowiednimi typami na swojej mapie podstawionych w ..
5
kilka opcji ...
skopiować mapę do nowej tabeli Lua i przekazać tablicę Lua.
Tworzenie proxy table który kieruje odczytuje i zapisuje przez metatable za
__index
i__newindex
metamethods
Wadą (1) wszystko jest kopiowanie, oczywiście.
Wadą (2) jest to, że pairs()
nie działa na stole proxy
Omówienie rozwiązujących lua z uogólnionym pairs
jest in the wiki i this mailing list thread. Uogólnione pairs
Oczekuje się za Lua 5.2
to nie powinno być zbyt trudne, aby dodać iterator funkcja do metatable, które mogą być używane tak jak pary() dla tabel. –
Zazwyczaj robię opcję 2; chyba że tabela jest mała i jest wiele żądań do tabeli głównie do odczytu. – Javier