Как мне передать таблицу неизвестной длины из Lua в связанную функцию C++?
Я хочу иметь возможность вызывать функцию Lua следующим образом:
call_C_Func({1,1,2,3,5,8,13,21})
И скопировать содержимое таблицы в массив (желательно вектор STL)?
Как мне передать таблицу неизвестной длины из Lua в связанную функцию C++?
Я хочу иметь возможность вызывать функцию Lua следующим образом:
call_C_Func({1,1,2,3,5,8,13,21})
И скопировать содержимое таблицы в массив (желательно вектор STL)?
Если вы используете LuaBind, это так же просто, как один зарегистрированный вызов. Что касается свертывания собственных, вам нужно взглянуть на функцию lua_next.
В основном код выглядит следующим образом:
lua_pushnil(state); // first key
index = lua_gettop(state);
while ( lua_next(state,index) ) { // traverse keys
something = lua_tosomething(state,-1); // tonumber for example
results.push_back(something);
lua_pop(state,1); // stack restore
}
Это будет моя попытка (без проверки ошибок):
int lua_test( lua_State *L ) {
std::vector< int > v;
const int len = lua_objlen( L, -1 );
for ( int i = 1; i <= len; ++i ) {
lua_pushinteger( L, i );
lua_gettable( L, -2 );
v.push_back( lua_tointeger( L, -1 ) );
lua_pop( L, 1 );
}
for ( int i = 0; i < len; ++i ) {
std::cout << v[ i ] << std::endl;
}
return 0;
}
Вы также можете использовать lua_objlen:
Возвращает «длину» значения по заданному допустимому индексу: для строк это длина строки; для таблиц это результат оператора длины ('#'); для пользовательских данных это размер блока памяти, выделенного под пользовательские данные; для других значений это 0.
lua_objlen
.
- person cubuspl42; 25.06.2014