2009-01-17 9 views

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 ...

  1. skopiować mapę do nowej tabeli Lua i przekazać tablicę Lua.

  2. 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

+0

to nie powinno być zbyt trudne, aby dodać iterator funkcja do metatable, które mogą być używane tak jak pary() dla tabel. –

+0

Zazwyczaj robię opcję 2; chyba że tabela jest mała i jest wiele żądań do tabeli głównie do odczytu. – Javier