如何将通过从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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top