我正在使用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()函数。这可能吗?如果可能,该怎么办?还是其他任何好主意?
答案 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();
}