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

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

看起来 tolua++ 忽略了我类的一些重载运算符。

tolua++ 发出以下警告:

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

有没有什么方法可以解决这个问题?

原文链接 https://stackoverflow.com/questions/4517971

点赞
stackoverflow用户501459
stackoverflow用户501459

我不熟悉tolua++,但它不支持这两个操作是有道理的。tolua++ 只是礼貌地告诉你,这些代码没有任何效果。

在 Lua 的上下文中赋值运算符没有意义,并且“=”运算符是“==”的否定,因此实现“operator==”可以同时处理“==”和“=”。

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

确实,这解释了不等式关系,但分配怎么样?

在 Lua 中,变量没有类型,它们只是用于值的名称。赋值运算符将新值与该名称关联,新值可以是任何类型,它不会修改先前与该名称关联的值(例如,该值存在于内存中的某个地方,未更改,等待垃圾回收,如果不存在对它的进一步引用)。考虑全局变量的赋值意义:

打印(数学)->表:00516620
数学="foo"
打印(数学)->foo

第二行等价于:

_G.math = "foo"

换句话说,math=val是替换 _G ["math"] 处的值,因此修改 math 对象的 operator= 意味着什么?什么也没有。

你最接近修改分配运算符的地方是__newindex的元方法,它仅适用于表/用户数据,因此对本地变量没有影响。在我们的“math = 'foo'”示例中,__newindex_G 而不是 math 上,并且甚至在这种情况下不会被调用,因为 _G.math 有一个现有值(当您尝试分配一个给不存在的键时才调用 __newindex)。

2010-12-23 11:31:05