qSort bzw. QT Container und Generisches Sortieren
-
Hallo,
ich möchte eine QT Containerklasse "generisch" sortieren.
mit qSort() kann man ja einiges machen, aber ich weiß nicht, wie ich da meine eigene Vergleichsmethode mitgeben kann:
class ICompareable { public: virtual bool compare(const A*, const A*) = 0; }; class ConcreteCompare : public ICompareable { public: bool compare(const A*, const A*) { cout << "concrete compare" << endl; return false; } }; void someFunctionSomeWhere() { QVector<A*> list; list.pushBack(...); // !!!!das geht aber nicht :(!!! ICompareable *cmp = getConcreteCompareMethod(); qSort(list.begin(), list.end(), comp->compare); }
danke im Voraus!
-
WAS geht daran nicht?
Fehlermeldungen? Absturz?Ich schätze mal, dass du deine Methode static machen musst, dann kannst du aber nich mehr polymorph drauf zugreifen. warum nimmst du nicht std::vector und std::sort?
-
Wenn du unbedingt dein "ICompareable" benutzen möchtest:
// untested! class DoCompare { ICompareable* cmp; public: DoCompare(ICompareable* cmp) : cmp(cmp) { } bool operator()(const A* lhs, const B* rhs) { return cmp->compare(lhs, rhs); } }; QVector<A*> list; list.pushBack(...); ICompareable *cmp = getConcreteCompareMethod(); qSort(list.begin(), list.end(), DoCompare(comp));
Ob das alles sonderlich "generisch" ist, bezweifle ich aber.