在C / C ++中引用Lua函数

我有一个函数嵌套在一组表中相对较深。 在C / C ++中是否有一种方法可以获得该函数的“引用”,并在需要使用它时将其(和args)推送到堆栈中?

这就是参考系统的用途。 函数调用r = luaL_ref(L, LUA_REGISTRYINDEX)将值存储在注册表中的堆栈顶部,并返回一个整数,该整数可以存储在C端并用于通过函数调用lua_rawgeti(L, LUA_REGISTRYINDEX, r)检索值lua_rawgeti(L, LUA_REGISTRYINDEX, r)

有关完整故事,请参阅PiL章节以及luaL_ref()lua_rawgeti()luaL_unref()的文档。

Lua API( http://www.lua.org/manual/5.1/manual.html#3 )可用于访问您想要的任何表成员。 使用lua_gettable()提取表成员并将其放在lua堆栈上,如果该成员也是一个表,只需再次调用lua_gettable()来访问该表,依此类推……

(根据你正在做的事情,lua_rawget()可能是比lua_gettable()更好的选择

Addtional回应评论:

好的,这有点儿有趣。 好吧,表是一个引用对象(或多或少),所以你可以安全地保存最里面的表引用。

由于lua API似乎无论如何都没有直接操作表ref,因此您可能必须将ref推送到全局,或者如果不能使用单个表条目的新表。 如果您以后想要ref,只需从全局获取它。

例如

 // Final table reference is now at top of stack, after multiple dereferences lua_setglobal( L, "mytableref" );