How would I pass a table of unknown length from lua into a bound C++ function?
I want to be able to call the lua function like this:
call_C_Func({1,1,2,3,5,8,13,21})
And copy the table contents into an array (preferably STL vector)?
How would I pass a table of unknown length from lua into a bound C++ function?
I want to be able to call the lua function like this:
call_C_Func({1,1,2,3,5,8,13,21})
And copy the table contents into an array (preferably STL vector)?
If you use LuaBind it's as simple as one registered call. As for rolling up your own, you need to take a look at lua_next function.
Basically the code is as follows:
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
}
You can also use lua_objlen:
Returns the "length" of the value at the given acceptable index: for strings, this is the string length; for tables, this is the result of the length operator ('#'); for userdata, this is the size of the block of memory allocated for the userdata; for other values, it is 0.
This would be my attempt (without error checking):
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;
}