c++ - 创建一个调用其他 Lua 函数的 C++ 函数

标签 c++ function lua swig

我想知道是否可以创建一个 C++ 函数,以 Lua 函数作为参数来调用它。

例如在 Lua 中,

function sub()
  print('I am sub function')
end

function main()
  callfunc(sub) //C++ function that takes a function variable to call 
end

是否可以在 C++ 中创建 callfunc() 函数?

顺便说一句,我正在使用 SWIG。

最佳答案

您可以使用特殊的 lua_fnptr.i 将 Lua 解释器状态传递给 C++ 函数来创建回调。 header 。头文件还包含进一步的使用信息。

%module callback

%include <lua_fnptr.i>

%{
void callfunc(SWIGLUA_FN fn) {
    SWIGLUA_FN_GET(fn);
    lua_call(fn.L,0,0);
}
%}

void callfunc(SWIGLUA_FN fn);
local cb = require("callback")
function hello()
    print("Hello World!")
end
cb.callfunc(hello)
$ lua5.2 test.lua
Hello World!

关于c++ - 创建一个调用其他 Lua 函数的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145432/

相关文章:

c++ - 3D 线段和平面相交 - 续

c++ - 哪些替换失败在 requires 子句中是不允许的?

c++ - 在 C++ 中检查相等性 i==0 与 0==i 的两种方式的区别

python - 处理轨迹奇点: delete photons causing error

lua - Lua 主要基于成熟的编程语言思想吗?

c++ - 在 VS2012 中使用 CMAKE 将启用增量链接设置为 NO

c++ - 从外部函数/类设置动态数组的新大小?

javascript - 如何从javascript中的函数对象中调用子函数

lua - 在redis的lua中获取当前日期和时间

c++ - 从 C++ 访问表中的 Lua 表