有条件地从C++调用Lua函数。

我正在使用Lua编写脚本并在C ++中嵌入它们。在这个过程中,我使用**LuaBridge**。

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

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

然而,**仅在特定条件下才会调用此函数。例如,只有在从C ++代码经过一系列复杂的计算**获得“true”后才会调用。

受我的Lua和LuaBridge知识的限制,我知道的是:在执行

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

之后,我可以使用

LuaRef blabla = getGlobal(L, "blabla")

从Lua脚本中读取变量和函数。

但是,现在我需要首先读取变量并将它们在一个成员函数中使用:

LuaRunner::LuaRun(){}

该函数在一个单独的C ++类

class LuaRunner

中定义。如果条件为“true”,则会获取该条件,并调用此run()函数。由于进一步处理的限制,最好在C ++成员函数

LuaRunner::LuaRun(){}

中直接调用此run()函数。

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

使用

LuaRef run = getGlobal(L, "run")

读取函数以及其他变量,并**_"保存"_**这个run()函数在C ++代码的某个地方(也许是作为类成员函数),然后稍后可以通过指针或同一类中的对象调用run()函数。是否可能?如果可能,如何做到?或者有其他好的主意?

点赞
用户88888888
用户88888888

有时候,我们需要在 C++ 中存储 luabridge::LuaRef,以便稍后调用它们,就像正常调用其他函数一样。但有时候不需要将 LuaRef 存储在任何地方。一旦你加载了脚本,所有的函数都会留在你的 lua_State 中,除非你将它们设置为 nil 或通过加载另一个使用相同函数名称的脚本来覆盖它们。你可以使用 getGlobal 函数获取它们。如果你的 Lua 函数需要参数,你可以使用像这样的 LuaRef 的运算符() 来传递参数:

if(...) { // 你的调用条件
    LuaRef f = getGlobal(L, "someFunction");
    f(arg1, arg2, ...); // 如果你的函数不需要参数,只需使用 f();
}
2015-11-14 07:21:25