Как я передаю таблицу из Lua в C++?

Как я передал бы таблицу неизвестной длины из Lua в связанную функцию C++?

Я хочу смочь вызвать функцию Lua как это:

call_C_Func({1,1,2,3,5,8,13,21})

И скопируйте содержание таблицы в массив (предпочтительно вектор STL)?

5
задан Brian Tompsett - 汤莱恩 15 October 2016 в 22:37
поделиться

3 ответа

Если вы используете 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
}
3
ответ дан 15 December 2019 в 01:00
поделиться

Вы также можете использовать lua_objlen:

Возвращает "длину" значения по заданному допустимому индексу: для строк, это - длина строки ; для таблиц это результат оператора длины ('#'); для пользовательских данных это размер блока памяти , выделенного для пользовательских данных ; для других значений это 0.

-1
ответ дан 15 December 2019 в 01:00
поделиться

Это моя попытка (без проверки ошибок):

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;
}
2
ответ дан 15 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: