有条件地从 C++ 调用 Lua 函数
call Lua function from C++ conditionally
我正在使用 Lua 编写脚本并将它们嵌入到 C++ 中。我在这个过程中使用LuaBridge
在我的 Lua 脚本中,我有 一些变量需要首先检索以便在 C++ 中使用,此外,我有一个非常简单的功能:
run = function()
print ("state is on!")
end
但是,此函数仅在特定条件下调用。即只有在C++代码经过一系列复杂的计算后得到"true"时才会调用
受限于我的Lua和Lua桥梁知识,我所知道的是:在我做了
之后
loadscript(L, "script.lua")
lua_pcall(L,0,0,0)
我可以使用
从Lua脚本中读取变量和函数
LuaRef blabla = getGlobal(L, "blabla")
但是现在,我需要先读出变量并使用它们,然后在成员函数中使用
LuaRunner::LuaRun(){}
在单独的 C++ 中定义 class
class LuaRunner
条件将被获取,如果条件是 "true",这个 运行() 函数将被调用。最好在 C++ 成员函数
中调用此 运行() 函数
LuaRunner::LuaRun(){}
由于进一步处理的限制。
因此,我想知道这是否可能:
使用
读出函数
LuaRef run = getGlobal(L, "run")
连同开头的其他变量和"save"这个运行()函数在C++的某处代码(可能作为 class 成员函数),然后 运行() 函数可以在稍后由同一 class 中的指针或对象调用。这可能吗?如果可以,怎么做?或者还有什么好的想法?
可以将 luabridge::LuaRef 存储在 C++ 中,以便稍后调用它们,就像您通常调用任何其他函数一样。尽管有时不需要在任何地方存储 LuaRef。加载脚本后,所有函数都会保留在 lua_State 中,除非您将它们设置为 nil 或通过加载另一个使用相同函数名称的脚本来覆盖它们。您可以使用 getGlobal 函数获取它们。如果您的 Lua 函数接受参数,您可以使用 LuaRef's operator() 像这样传递它们:
if(...) { // your call condition
LuaRef f = getGlobal(L, "someFunction");
f(arg1, arg2, ...); // if your function takes no arguments, just use f();
}
我正在使用 Lua 编写脚本并将它们嵌入到 C++ 中。我在这个过程中使用LuaBridge
在我的 Lua 脚本中,我有 一些变量需要首先检索以便在 C++ 中使用,此外,我有一个非常简单的功能:
run = function()
print ("state is on!")
end
但是,此函数仅在特定条件下调用。即只有在C++代码经过一系列复杂的计算后得到"true"时才会调用
受限于我的Lua和Lua桥梁知识,我所知道的是:在我做了
之后loadscript(L, "script.lua")
lua_pcall(L,0,0,0)
我可以使用
从Lua脚本中读取变量和函数LuaRef blabla = getGlobal(L, "blabla")
但是现在,我需要先读出变量并使用它们,然后在成员函数中使用
LuaRunner::LuaRun(){}
在单独的 C++ 中定义 class
class LuaRunner
条件将被获取,如果条件是 "true",这个 运行() 函数将被调用。最好在 C++ 成员函数
中调用此 运行() 函数LuaRunner::LuaRun(){}
由于进一步处理的限制。
因此,我想知道这是否可能:
使用
读出函数LuaRef run = getGlobal(L, "run")
连同开头的其他变量和"save"这个运行()函数在C++的某处代码(可能作为 class 成员函数),然后 运行() 函数可以在稍后由同一 class 中的指针或对象调用。这可能吗?如果可以,怎么做?或者还有什么好的想法?
可以将 luabridge::LuaRef 存储在 C++ 中,以便稍后调用它们,就像您通常调用任何其他函数一样。尽管有时不需要在任何地方存储 LuaRef。加载脚本后,所有函数都会保留在 lua_State 中,除非您将它们设置为 nil 或通过加载另一个使用相同函数名称的脚本来覆盖它们。您可以使用 getGlobal 函数获取它们。如果您的 Lua 函数接受参数,您可以使用 LuaRef's operator() 像这样传递它们:
if(...) { // your call condition
LuaRef f = getGlobal(L, "someFunction");
f(arg1, arg2, ...); // if your function takes no arguments, just use f();
}