6

如何将未知长度的表从 Lua 传递到绑定的 C++ 函数?

我希望能够像这样调用 Lua 函数:

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

并将表格内容复制到一个数组中(最好是 STL 向量)?

4

3 回答 3

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
}
于 2010-02-08T05:33:26.923 回答
3

这将是我的尝试(没有错误检查):

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;
}
于 2010-02-12T15:15:49.590 回答
-1

你也可以使用 lua_objlen:

返回给定可接受索引处的值的“长度”:对于字符串,这是字符串长度;对于表,这是长度运算符 ('#') 的结果;对于用户数据,这是为用户数据分配的内存块的大小;对于其他值,它是 0。

于 2010-02-08T15:10:46.010 回答