我有一个QList<MyPoint*> l,其中MyPoint是我要执行的用户自定义类类型:

 QList<MyPoint*> l;
 MyPoint *a = new MyPoint(2, 4);
 MyPoint *b = new MyPoint(4, 8);
 MyPoint *c = new MyPoint(2, 4);
 l << a << b;

然后:
l.contains(c); //true

我尝试重载==运算符,因为 doc 说:



尝试了不同的方法,但似乎均未达到预期效果。

这是到目前为止我尝试过的代码:
class MyPoint
{
public:
    int x, y;

    MyPoint(int x, int y)
        : x(x),
          y(y)
    {
    }

    bool operator == (const MyPoint &other) const
    {
        return other.x == this->x && other.y == this->y;
    }

    bool operator == (const MyPoint *other) const
    {
        return true;
    }
};

bool operator == (const MyPoint &a, const MyPoint &b)
{
    return a.x == b.x && a.y == b.y;
}

我尝试了类似的东西:
bool operator == (const MyPoint *a, const MyPoint *b)
{
    return a.x == b.x && a.y == b.y;
}

但是我读到这是不可能的...我知道(*a == *c)是正确的,但是我想影响contains()的行为,以便可以使用自己的比较器进行比较。

最佳答案

运算符==重载仅适用于MyPointer对象的指针地址,而不适用于对象本身。

代替列出MyPointer *对象,请尝试制作MyPointer对象的列表(即QList<MyPointer>)。但是,您必须确保重载赋值运算符和复制构造函数。

如果这变得太昂贵了,请考虑像大多数Qt数据类一样,通过使用QSharedDataQSharedDataPointer类将您的类转换为使用implicit sharing

10-08 00:44