我有这段代码:
QVector<LogEvent *> currentItems;
//add a bunch of LogEvent objects to currentItems
qSort(currentItems.begin(), currentItems.end());
这是我的LogEvent类:
LogEvent.h:
//LogEvent.h
class LogEvent : public QTreeWidgetItem {
public:
LogEvent();
LogEvent(QDateTime, LogEvent *parent = 0);
~LogEvent();
bool operator<(const LogEvent *);
bool operator>(const LogEvent *);
bool operator<=(const LogEvent *);
bool operator>=(const LogEvent *);
bool operator==(const LogEvent *);
private:
QDateTime timestamp;
};
LogEvent.cpp:
//LogEvent.cpp
LogEvent::LogEvent()
{
}
LogEvent::LogEvent(QDateTime timestamp, LogEvent *parent)
: QTreeWidgetItem(parent)
{
this->timestamp = timestamp;
}
bool LogEvent::operator<(const LogEvent * event) {
return (this->timestamp < event->timestamp);
}
bool LogEvent::operator>(const LogEvent * event) {
return (this->timestamp > event->timestamp);
}
bool LogEvent::operator<=(const LogEvent * event) {
return (this->timestamp <= event->timestamp);
}
bool LogEvent::operator>=(const LogEvent * event) {
return (this->timestamp >= event->timestamp);
}
bool LogEvent::operator==(const LogEvent * event) {
return (this->timestamp == event->timestamp);
}
在我进行排序之后,currentItems中的LogEvent对象没有被正确地排序。我非常确定我的运算符重载是正常的。
当我做这样的事情时:
std::cout << currentItems[0]<=currentItems[1]?"T":"F";
它将输出正确的值。
那么我做错了什么,如何纠正呢?
qSort<T>(QList<T*>)
方法,但我不确定是否可能存在这样的重载声明,因为我对模板方法以及如何部分重载它们(或者称之为什么...)并不熟悉。如果可能的话,您永远不会意外地对指针进行排序,而不是它们后面的对象。 - leemesoperator<(T*,T*)
,但我不确定是否可能。 - leemesoperator<(LogEvent*, LogEvent)
以使其与LogEvent::operator<(LogEvent*)
对称。 - 01d55