Как создать таблицу Lua в C ++ и передать ее функции Lua? - PullRequest
9 голосов
/ 17 января 2009

В C ++ у меня есть map<string, string>, содержащий неизвестное количество записей. Как я могу передать это функции Lua, чтобы функция Lua могла использовать данные в виде таблицы?

Ответы [ 2 ]

19 голосов
/ 20 января 2009

, если вы хотите настоящий стол Луа:

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

с правильными типами для вашей карты, замененными в ..

5 голосов
/ 17 января 2009

Пара вариантов ...

  1. Скопируйте карту в новую таблицу Lua и передайте таблицу Lua.

  2. Создание прокси-таблицы , которая направляет чтение и запись через метаметоды метаданных __index и __newindex

Недостатком (1) является, конечно, копирование.

Недостатком (2) является то, что pairs() не будет работать на прокси-таблице

Обсуждение исправлений для Lua для обобщенного pairs - это в вики и этой ветки списка рассылки . Обобщенный pairs ожидается для Lua 5,2

...