Pergunta

Em C ++, eu tenho um map<string, string>, contendo um número desconhecido de entradas. Como posso passar isso para uma função Lua, de modo que a função Lua pode usar os dados como uma tabela?

Foi útil?

Solução

Se você quer uma tabela lua real:

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

com os tipos certos para o seu mapa substituídos em ..

Outras dicas

Opções casal um ...

  1. Copiar o mapa em uma nova tabela Lua, e passar a tabela Lua.

  2. Criar um tabela de proxy que dirige leituras e gravações através de um de metatabela __index e __newindex metamétodos

A desvantagem (1) é toda a cópia, é claro.

A desvantagem (2) é que pairs() não vai funcionar na mesa de proxy

A discussão de correções para Lua para pairs generalizada é no wiki e esta mailing list fio . pairs generalizada é esperado para Lua 5.2

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top