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

标签 c++ function lua luabridge

我正在使用 Lua 编写 scipts 并将它们嵌入到 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)

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

LuaRef blabla = getGlobal(L, "blabla")

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

LuaRunner::LuaRun(){}

在单独的 C++ 类中定义

class LuaRunner

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

LuaRunner::LuaRun(){}

由于进一步处理的限制。

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

读出函数使用

LuaRef run = getGlobal(L, "run")

连同开头的其他变量和 “保存” 这个 run() 函数在 C++ 代码的某处(可能作为类成员函数),然后运行() 函数稍后可以由指针或同一类中的对象调用。这可能吗?如果可以,怎么做?或者还有什么好的想法?

最佳答案

可以将 luabridge::LuaRef 存储在 C++ 中以便稍后调用它们,就像您通常调用任何其他函数一样。尽管有时不需要在任何地方存储 LuaRef。加载脚本后,所有函数都会保留在 lua_State 中,除非您将它们设置为 nil 或通过加载另一个使用相同函数名称的脚本来覆盖它们。您可以使用 getGlobal 函数获取它们。如果您的 Lua 函数接受参数,您可以使用 LuaRef 的 operator() 来传递它们,如下所示:

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

关于c++ - 有条件地从 C++ 调用 Lua 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696883/

相关文章:

c++ - 系统托盘图标没有响应

c++ - 在c++中正确使用delete

function - Golang - 为什么我可以从值类型调用指针接收器方法?

c++ - 在调用函数之前如何推断 auto ?

ios - Lua中整数后添加小数

lua - 从最短到最长对单词数组/表进行排序

C++: STRING 函数返回十六进制值而不是字符串

c++ - 如何使用 GLFW 在 openGL 中旋转相机?

php - MySQL Select 内部函数访问其他地方的变量

lua - 在cmake中找不到带有find_package的Lua头文件