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

时间:2015-11-13 16:01:39

标签: c++ function lua luabridge

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

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

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

但是,此功能仅在特定条件下 。即只有在" true"经过一系列复杂的计算后,从C ++代码 获得。

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

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

我可以使用

从Lua脚本中读出变量和函数
LuaRef blabla = getGlobal(L, "blabla")

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

LuaRunner::LuaRun(){}

在单独的C ++类中定义

class LuaRunner

条件将被删除,如果条件为" true"则将调用此run()函数。最好在C ++成员函数中调用此run()函数

LuaRunner::LuaRun(){}

由于进一步处理的限制。

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

使用

读出功能
LuaRef run = getGlobal(L, "run")

与开头的其他变量以及 "在C ++代码中的某处保存" 此run()函数(可能作为类成员函数) ,然后可以通过同一类中的指针或对象稍后调用run()函数。这可能吗?如果可能,该怎么办?还是其他任何好主意?

1 个答案:

答案 0 :(得分:1)

可以将 luabridge :: LuaRef 存储在C ++中以便稍后调用它们,就像通常调用任何其他函数一样。虽然有时候没有必要在任何地方存储 LuaRef 。加载脚本后,所有函数都保留在 lua_State 中,除非您将它们设置为nil或通过加载另一个使用相同名称的函数来覆盖它们。您可以使用 getGlobal 功能获取它们。如果您的Lua函数接受了参数,您可以使用 LuaRef&#39> 运算符()传递它们,如下所示:

if(...) { // your call condition
    LuaRef f = getGlobal(L, "someFunction");
    f(arg1, arg2, ...); // if your function takes no arguments, just use f();
}
相关问题