我将 Lua 嵌入到 C++ 类中。
似乎 tolua++ 忽略了我班级的一些重载运算符。
tolua++ 发出以下警告:
- **tolua++ 警告:不支持 operator=,忽略
- **tolua++ 警告:不支持 operator!=,忽略
有没有办法解决?
我不熟悉 tolua++,但它不支持其中任何一个是有道理的。tolua++ 只是礼貌地通知您,因此您不会认为该代码有任何影响。
赋值运算符在 Lua 的上下文中没有意义,并且运算~=
符是 的否定==
,因此实现operator==
既要照顾你的 Lua 对象==
,也要照顾~=
好你的 Lua 对象。
编辑:使用此空间回答下面提出的问题,以便我可以包含代码:
没错,这解释了不等式关系,但赋值呢?
在 Lua 中,变量没有类型,它们只是值的名称。赋值运算符将任何类型的新值与该名称相关联,它不会修改与该名称关联的先前值(例如,该值存在于内存中的某处,未更改,如果没有进一步引用它,则等待垃圾收集存在)。想想赋值对全局变量意味着什么:
print(math) --> table: 00516620
math = "foo"
print(math) --> foo
第二行相当于:
_G.math = "foo"
换句话说,math=val
正在替换 处的值_G["math"]
,那么这是否意味着覆盖operator=
数学对象?没有。
最接近修改赋值运算符的是元__newindex
方法,它仅适用于表/用户数据,因此对本地人没有影响。在我们的math="foo"
示例中,__newindex
将打开_G
not math
,并且在这种情况下甚至不会被调用,因为_G.math
它具有现有值(__newindex
当您尝试将值分配给不存在的键时调用)