问题标签 [luabind]
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.
lua - 我如何迭代主表下存在的表参数?
在 lua 中,我调用了一个函数,该函数返回一个包含许多内部参数的表变量。但是当我得到该值时,我无法访问表中存在的参数。我可以在原始函数中看到表格参数的形式
[[table:0x0989]] { [[table:0x23456]] str = "hello" width = 180 }, [[table:0x23489]] { str1 = "world" }
它显示如下。但是当它返回一次时,我可以获取表的顶部地址,例如 [[table:0x0989]] ..当我尝试访问主表中存在的表时。它显示 nil 值...我怎么称呼它??谁能帮我??
parameters - luabind - 可变数量的参数
如何将函数与接受可变数量参数的 luabind 绑定?基本上,我想编写自己的 print() 函数。
我知道object
luabind 中的类作为参数可以接受任何数据类型,最好是接收一个动态表luabind::object
作为参数。
c++ - Luabind:“没有找到匹配的重载,候选人:”
注意,我已经阅读并应用了答案:Calling C++ member function from Luabind cause "No matching overload found",但这并没有解决我的问题。
我有一个简单的类,我通过 luabind 向 LUA 公开
这是绑定代码:
这是我的LUA:
但是我得到了标题中提到的错误(这直接取自我的日志文件):
我一直在为此扯头发,看不出我做错了什么。任何人都可以解释一下吗?!:)
c++ - 如何防止在 Luabind 类中创建新属性?
我正在使用Luabind将 C++ 类绑定到 Lua。从 Lua 脚本中,我可以将任意属性(键/值对)添加到代表我的类的表中,即使我从未告诉 Luabind 这些属性存在:
hippopotamus 行虽然很荒谬,但执行时不会导致 Lua 错误。
如何防止这些新属性?我知道当只使用 Lua C API 时,这可以使用 __newindex 元方法来完成,但是有没有办法用 Luabind 做到这一点?
c++ - Luabind 中的断言失败
我目前在使用 Luabind 将 Lua 脚本 AI 与 C++ 游戏连接时遇到问题。
我在循环中调用一个更新函数(每帧一次),这个函数从 Luabind 中注册的 C++ 函数中检索信息。
我的问题如下:在可变的、不可预测的时间之后,Luabind 中出现断言失败,导致中止。在 Lua 中下降时,错误总是发生在 /usr/include/luabind/wrapper_base.hpp:124 中。
你有什么想法可以做到这一点吗?对于我的测试,C++ 和 LUA 中调用的函数总是相同的。
有关该问题的更多详细信息:
wrapper_base.hpp 中的断言失败的内容
确切的错误
c++ - 在 C++ 中,使用 luabind,调用 lua 文件中定义的函数?
假设我有一个 lua 文件:
我将如何使用 luabind 加载该文件,并调用该函数 - 类似于:
但这会返回一个错误: 在抛出 'luabind::error' what() 的实例后调用终止:lua 运行时错误已中止
那么,做我想做的事情的正确语法是什么?(从错误的外观来看,似乎是 lua 文件中的语法有问题,但我认为不是......)
lua - Luabind 和协程
我在理解如何使用 luabind 正确使用协程时遇到了一些麻烦。有一个模板函数:
其中 ( Ret
) 应该包含yield
Lua 传递给的值。
我目前的困惑点是:
- 如果函数返回而不是调用会发生什么
yield
?是否resume_function
返回函数的返回值? - 如果您不提前知道哪些(或多少)参数将被传递给,您应该如何使用此功能
yield
?例如,如果有多个可能的屈服函数,该函数可能会调用。 Ret
如果将多个值传递给,则类型是yield
什么?
我完全误解了这一切是如何运作的吗?我设想这样的事情。在 Lua 方面:
loadImage
将是一个 C++ 函数,它请求将图像加载到不同的线程中,然后调用lua_yield
,一段时间后作为参数调用luabind::resume_function
。img
我应该作为参数传递"foo.png"
给吗?yield
在我调用之前给一个不同的函数yield
,然后从不将任何值传递给yield
?构建这个的正确方法是什么?我显然在这里误解了一些东西。
c++ - 调用 luabind 派生成员作为协程
luabind 文档说要从 C++ 调用 Lua 派生的虚拟成员,您创建一个派生自的包装类luabind::wrap_base
并调用函数,如下所示:
到目前为止一切顺利 - 我有这么多工作。
但是我如何实现BaseWrapper::foo()
将被覆盖的foo
(在 Lua 端)调用为协程(使用resume_function
)而不是直接调用它call
呢?
这是使用非成员函数的方式:
我认为我需要知道的是如何获取func
(foo
由 Lua 派生类实现),然后我现有的resume_function
逻辑应该按原样工作。
c++ - 重载函数和 luabind 的问题
我有一个要绑定到 lua 的类。减少的代码可能是:
当我尝试编译时,编译器会抛出错误:
我知道问题的原因是 luabind 无法推断出最佳重载函数,但是阅读 luabind 文档我在 luabind 中正确定义了该函数。
有任何想法吗?
提前致谢
c++ - 这个脚本是否会导致很多很多的闭包,如果是,还有什么替代方法?
我想在 Lua 中实现一个 GUI 消息处理系统,目前它的工作原理是这样的:
在 c++ 代码中,windows 有窗口过程,就像它们在 Windows API 中一样,我也试图在 Lua 中依赖它。
所以我的窗户上有一个luabind::object
指向桌子的东西
该表的关键是一个 GUI 消息。Ele 是窗口句柄,a 又是消息,b 和 c 是参数。
是一些示例函数。
他们像这样绑定到对象:
这一切都在同一个脚本文件中,当我加载它时,它只会(据我所知)执行一次。因此,首先构建表,然后将表绑定到luabind:::object
. 然后在 c++ 中调用这个对象,如下所示:
因此,每当触发消息时,都会调用该表,并且每次都会返回一个函数,我猜。我假设这一点,因为即使我只加载脚本文件一次,当我调试脚本并在那里放置断点时,当调用动作对象时断点会被命中。
这是处理事情的好方法吗?