我有一个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数据类一样,通过使用QSharedData
和QSharedDataPointer
类将您的类转换为使用implicit sharing。