我有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()
行为,以便使用我自己的比较器进行比较。
答案 0 :(得分:2)
operator ==重载仅适用于MyPointer
个对象的指针地址,而不是对象本身。
不要使用MyPointer *对象列表,而是尝试制作MyPointer对象列表(即QList<MyPointer>
)。您必须确保重载赋值运算符和复制构造函数。
如果这样做太昂贵,请考虑通过使用QSharedData
和QSharedDataPointer
类来转换您的类,以便像大多数Qt数据类一样使用implicit sharing。