Вы можете создать обратный вызов, передав состояние интерпретатора Lua в функцию C ++, используя специальный заголовок lua_fnptr.i
. Заголовочный файл также содержит дополнительную информацию об использовании.
%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!