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