كيف يمكنني اجتياز جدول من LUA إلى C ++؟
سؤال
كيف يمكنني اجتياز طاولة من طول غير معروف من LUA إلى وظيفة C ++ ملزمة؟
أريد أن أكون قادرا على الاتصال بوظيفة LUA مثل هذا:
call_C_Func({1,1,2,3,5,8,13,21})
ونسخ محتويات الجدول إلى صفيف (يفضل أن يكون STL Vector)؟
المحلول
إذا كنت تستخدم 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:
إرجاع "طول" القيمة في الفهرس المقبول المعطى: للحصول على سلاسل، هذا هو طول السلسلة؛ بالنسبة للجداول، فهذه نتيجة لمشغل الطول ('#')؛ بالنسبة إلى UserData، هذا هو حجم كتلة الذاكرة المخصصة ل UserData؛ لقيم أخرى، هو 0.
لا تنتمي إلى StackOverflow