1

我正在使用 Lua 编写 scipts 并将它们嵌入到 C++ 中。我在这个过程中使用了 LuaBridge 。

在我的 Lua 脚本中,我有一些变量需要首先检索以便在 C++ 中使用,此外,我还有一个非常简单的函数:

run = function()
    print ("state is on!")
end

但是,此函数仅在特定条件下调用即仅在经过一系列复杂计算后从 C++ 代码中获得“真”时调用。

受限于我的 Lua 和 LuaBridge 知识,我知道的是:在我做之后

loadscript(L, "script.lua")
lua_pcall(L,0,0,0)

我可以通过使用从 Lua 脚本中读取变量和函数

LuaRef blabla = getGlobal(L, "blabla")

但是现在,我需要先读出变量并使用它们,然后在成员函数中

LuaRunner::LuaRun(){}

在单独的 C++ 类中定义

class LuaRunner

将获得条件,如果条件为“真”,将调用此 run() 函数。最好在 C++ 成员函数中调用这个 run() 函数

LuaRunner::LuaRun(){}

由于进一步处理的限制。

因此,我想知道这是否可能:

读出函数使用

LuaRef run = getGlobal(L, "run")

与开头的其他变量一起并将此 run() 函数“保存”在 C++ 代码中的某个位置(可能作为类成员函数),然后稍后可以通过指针或对象调用 run() 函数班级。这可能吗?如果可能,该怎么做?或者还有什么好主意?

4

1 回答 1

1

It's possible to store luabridge::LuaRef's in C++ to call them later just as you normally call any other function. Though sometimes there's no need to store LuaRef's anywhere. Once you load the script, all functions stay in your lua_State, unless you set them to nil or override them by loading another script which uses the same names for functions. You can get them by using getGlobal function. If your Lua function takes arguments, you can pass them, using LuaRef's operator() like this:

if(...) { // your call condition
    LuaRef f = getGlobal(L, "someFunction");
    f(arg1, arg2, ...); // if your function takes no arguments, just use f();
}
于 2015-11-14T07:21:25.297 回答