Создание функции C ++, которая вызывает другую функцию Lua - PullRequest
0 голосов
/ 03 июля 2018

Интересно, возможно ли создать функцию 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

Возможно ли создать callfunc() функцию в C ++?

Кстати, я пользуюсь SWIG.

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете создать обратный вызов, передав состояние интерпретатора 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!
...