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

时间:2009-09-13 03:49:47

标签: c++ c function lua function-pointers

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

2 个答案:

答案 0 :(得分:21)

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

有关完整报道,请参阅PiL chapter以及luaL_ref()lua_rawgeti()luaL_unref()的文档。

答案 1 :(得分:2)

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推送到全局,或者如果不能使用单个表条目的新表。如果您以后想要参考,只需从全局获取它。

e.g。

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