qsort mit Klassenmethode?
-
Hi,
wie kann ich qsort() unter Verwendung einer Klassenmethode aufrufen? Die C-Deklaration verlangt einen normalen Funktionspointer auf die compare-Routine. Da allerdings ein Member meiner Class ein wichtiger Parameter für den Vergleich ist müsste ich die compare-Routine als Methode meiner Klasse definieren. Allerdings ahut mir der Compiler dann ein qsort(...,this->comparator) um die Ohren.
Wie gehts richtig bzw. wie muss ich da casten?
-
Mit qsort geht das gar nicht.
Warum benutzt du nicht std::sort? Da kannst du ein beliebiges Funktionsobjekt angeben.
-
qsort() stammt noch aus C-Zeiten und hat deshalb auch keine Ahnung von Methoden. Da müsstest du eine Wrapperfunktion drumrumbauen, die sich um den Vergleich kümmert (wie du der Funktion dein this-Objekt übergeben kannst, bin ich mir nicht so sicher). In C++ hast du stattdessen sort() und ein paar Kollegen, bei denen du etwas flexibler mit der Übergabe bist. Die (imho) eleganteste Lösung wäre es da, die Vergleichsmethode als operator() zu schreiben und sort das this-Objekt mitzugeben:
class parent { bool operator()(const sub&l,const sub&r) { //vergleiche l und r } void sort_data() { std::sort(...,*this); } };
-
MFK schrieb:
Warum benutzt du nicht std::sort?
Weil ich Datentypen sortieren möchte, die eben keine Objekte sind und deshalb auch den von sort() benötigten random access iterator nicht haben.
-
Sorter schrieb:
Weil ich Datentypen sortieren möchte, die eben keine Objekte sind und deshalb auch den von sort() benötigten random access iterator nicht haben.
std::sort funktioniert auch mit hundsgewöhnlichen Zeigern. Zeig doch mal, was du da hast.