qsort mit templates
-
hi,
ich habe eine template-klasse mit einer liste von werten
// klasse für punkt template <class T> class TRSPoint2D { public T x, y; }; // klasse verwaltet eine liste von punkten template <class T> class TRSPointList { private: T *Items; public: // funktion zum sortieren der punkte void Sort(); };
// im quellcode neue instanz der klasse TRSPointList erzeugen // neue liste mit punkten erzeugen TRSPointList <TRSPoint2D <int> > *List = new TRSPointList <TRSPoint2D<int> >; // .. element hinzufügen
wie kann ich diese liste mit qsort (unter angabe der vergleichsfunktion) sortieren? für das vergleichen muss ich von jedem punkt der liste einen festlegbaren punkt abziehen.
folgendes funktioniert ja nicht, da der Typ von T nicht bekannt ist...
TRSPoint2D<T> TmpValue; static int CompFun(const void *Item1, const void *Item2) { // Element in ein Element der zugehörigen Klasse casten TRSPoint2D<T> Dummy = (*((TRSPoint2D<T>*) Item1)) - TmpValue; // ... elemente irgendwie vergleichen } template <class T> void TRSPointList<T>::Sort() { TmpValue = TRSPoint2D<T> (100, 100); qsort(Items, Anzahl - 1, sizeof(Items[0]), CompFun); }
-
statt TRS als Prefix verwendet man namespaces
Warum qsort? qsort() ist verdammt lahm und noch blöder zu verwenden. Nimm doch std::sort.