问题标签 [luaplus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
112 浏览

c++ - 需要接受模棱两可的参数的接口方法?

不知道如何正确描述帖子标题的问题。这是我遇到的问题。我们有一个接口,将由我们的LuaStateManager类实现,以将函数注册到LuaPlus::LuaState. 问题是这些函数可能有任何签名。

LuaPlus 允许你用它的LuaObject::RegisterDirect方法注册任何函数。它可以做到这一点,因为它使用模板。但是,我们必须将其封装LuaState在一个具有纯虚函数的接口中。

所以我们的想法是要有一个函数来LuaStateManager实现:

但是,您可能会看到,无法指定应将哪种类型的参数传递给此函数,因为它可能是任何函数签名。我们不能像 LuaPlus 那样使用模板,因为虚函数不能被模板化。我们也不能对整个LuaStateManager类或IScriptState接口进行模板化,因为对于传递的每种类型的函数,它都会生成一个全新的脚本状态,并且没有一个函数会驻留在一起。

过去是如何解决此类问题的?目前我们正在使用一种蛮力方法,它只是将我们所有的导出都扔到一个用户可以从中派生和填写的结构中。这样他们就会知道他们正在使用哪种脚本语言,并且能够直接使用LuaStateManager而不是IScriptState界面,但这完全是一个草率的“黑客”解决方案。

0 投票
1 回答
261 浏览

c++ - 使用 LUAPlus 将 Lua 表函数绑定到 C++ 变量

我想使用 LUAPlus 将 Lua 表函数链接到 C++ 变量。到目前为止,使用我在网上可以找到的信息,我已经设法使用 调用表函数DoString("tableName:functionName"),但我希望能够通过变量调用该函数。我知道它可能,但我无法弄清楚我做错了什么。

在我添加的代码中,pLuaState->DoString("table1:prints()")工作正常并根据需要打印所有内容。当我尝试获取函数并使用 func 变量调用它时,我的程序崩溃了

错误信息

断言失败:0,文件 .../luafunciton.h,第 41 行

如果我删除 Lua 中 prints() 函数中的所有打印,除了“print(“in prints”)”,一切正常。基于此,我假设GetByName("functionName")返回的函数不包含对其父表的引用。这就是我卡住的地方。

主文件

测试.lua

任何帮助,将不胜感激。