2016-03-06 93 views
2

我有一个QList<MyPoint*> l其中MyPoint是用户defiend类的类型,我想要做的:如何为QList指针编写自定义比较器?

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说:

此函数要求值类型具有 operator ==()的实现。

试过不同的方法,但似乎没有按预期工作。

这里是到目前为止,我已经试过代码:

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)为真但我想这会影响行为,以便使用我自己的比较器进行比较。

回答

2

operator == overloads只适用于MyPointer对象的指针地址,而不是对象本身。

而不是有一个MyPointer *对象列表,请尝试制作一个MyPointer对象列表(即QList<MyPointer>)。你必须确保你重载赋值操作符和拷贝构造函数。

如果这变得太昂贵了,考虑转换你的班级使用implicit sharing像大多数Qt数据类一样使用QSharedDataQSharedDataPointer类。