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

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

原文链接 https://stackoverflow.com/questions/1416797

点赞
stackoverflow用户138385
stackoverflow用户138385

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

(根据您要做什么,lua_rawget() 可能比 lua_gettable() 更好。)

附加响应评论:

好的,这有点更有趣。好吧,表是一个引用对象(或多或少),因此您可以安全地将最内部的表引用保存在某个地方。

由于 Lua API 似乎没有直接操作表引用的方式,因此您可能需要将引用推到全局,或者如果这不起作用,则创建一个仅具有单个表条目的新表。以后需要引用时,只需从全局获取即可。

例如:

// 最终表引用现在位于堆栈顶部,经过多次取消引用
lua_setglobal( L, "mytableref" );
2009-09-13 08:02:58
stackoverflow用户68204
stackoverflow用户68204

这就是引用系统的作用。函数调用 r = luaL_ref(L, LUA_REGISTRYINDEX) 将栈顶的值存储在注册表中并返回一个整数,可以将其存储在 C 侧,然后使用函数调用 lua_rawgeti(L, LUA_REGISTRYINDEX, r) 检索该值。

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

2009-09-13 19:26:04