如何将Lua中未知长度的表传递给绑定的C ++函数?
我希望能够像这样调用Lua函数:
call_C_Func({1,1,2,3,5,8,13,21})
将表格内容复制到一个数组(最好是STL向量)?
答案 0 :(得分: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
}
答案 1 :(得分:2)
这是我的尝试(没有错误检查):
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 :(得分:-1)
您也可以使用lua_objlen:
返回的“长度” 给定可接受指数的价值: 对于字符串,这是字符串 长度;对于表格,这是结果 长度运算符('#');对于 userdata,这是大小的 分配给的内存块 用户数据;对于其他值,它为0。