1

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

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

tolua++ 发出以下警告:

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

有没有办法解决?

4

1 回答 1

4

我不熟悉 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将打开_Gnot math,并且在这种情况下甚至不会被调用,因为_G.math它具有现有值(__newindex当您尝试将值分配给不存在的键时调用)

于 2010-12-23T11:31:05.323 回答