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

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

例如,在 Lua 中,

function sub()
  print('我是子函数')
end

function main()
  callfunc(sub) //C++ 函数,将函数变量作为参数调用
end

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

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

点赞
用户1944004
用户1944004

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

%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!
2018-07-03 10:47:28