tolua ++忽略了赋值和不等式运算符?

时间:2010-12-23 10:40:47

标签: c++ lua tolua++

我将Lua嵌入到C ++类中。

似乎tolua ++忽略了我班级的一些重载操作符。

tolua ++发出以下警告:

  • ** tolua ++警告:不支持operator =,忽略
  • ** tolua ++警告:不支持运营商!=,忽略

有什么方法吗?

1 个答案:

答案 0 :(得分:4)

我不熟悉tolua ++,但它不支持其中任何一种都是有意义的。 tolua ++只是礼貌地通知你,所以你不认为代码有任何影响。

赋值运算符在Lua和the ~= operator is the negation of ==的上下文中没有意义,因此实现operator==会为您的Lua对象处理==~=。< / p>

编辑:使用此空间回答下面提出的问题,以便我可以包含代码:

  

是的,这解释了不平等关系,但是如何分配呢?

在Lua中,变量不是键入的,它们只是值的名称。赋值运算符将任何类型的新值与该名称相关联,它不会修改与该名称关联的先前值(例如,该值存在于内存中的某个位置,未更改,如果没有对其进一步引用则等待进行垃圾回收存在)。想一想分配对全局变量意味着什么:

print(math) --> table: 00516620
math = "foo"
print(math) --> foo

第二行相当于:

_G.math = "foo"

换句话说,math=val正在替换_G["math"]处的值,那么它是否意味着覆盖数学对象的operator=?什么都没有。

最接近修改赋值运算符的是__newindex元方法,它只适用于表/ userdata,因此对本地化没有影响。对于我们的math="foo"示例,__newindex将在_G而不是math,并且在这种情况下甚至不会被调用,因为_G.math具有现有值(当您尝试将值分配给不存在的键时,将调用__newindex