Я хочу вызвать некоторую функцию C ++ из кода Lua и передать таблицу Lua в параметрах, что-то вроде этого:
call_cpp_function_from_lua({ x = 10, y = 20 })
В call_cpp_function_from_lua
Я хотел бы получить и использовать итератор для C ++ представления таблицы Lua, что-то вроде этого:
std::map<boost::variant<LuaTypesList>, boost::variant<LuaTypesList>>::iterator it = getLuaTableBegin();
Я могу использовать C API, чтобы сделать это, но это утомительно подвержено ошибкам, см. Итерация по таблице Lua из C ++?.
Библиотека QtLua реализует итераторы C ++ для таблиц Lua. Она имеет Value::iterator
а также Value::const_iterator
классы, допускающие итерацию таблиц Lua. Вот краткий пример того, как их использовать:
// code from examples/cpp/value/iterate.cc:32
QtLua::State state;
// New lua table value
state.exec_statements("table = { a = 1, b = 2, c = 3 }");
QtLua::Value table = state["table"];
// Iterate over lua table from C++ code
for (QtLua::Value::const_iterator i = table.begin(); i != table.end(); i++)
qDebug() << i.key().to_string_p()
<< i.value().to_string_p();
Других решений пока нет …