C++ sort (Library: algorithm) Frage zu den Parametern

Hi,

ich habe mal eine Frage zu sort in der Bibliothek <algorithm>.

sort erwartet als ersten Parameter den Anfang des Bereichs der sortiert wird und als zweiten das Ende des Bereichs.
Als dritten Parameter aber kann man eine Sortierfunktion angeben.

Die kann man z.B. einfach so implementieren:
Code:
bool compareObjects(Object obj1, Object obj2)
{
  return obj1.getID() < obj2.getID();
}
Diese kann man dann so übergeben:

Code:
sort(begin, end, compareObjects );

Und das funktioniert auch. Aber warum eigentlich? Warum meckert der Compiler nicht, dass dort bei compareObjects die Klammern fehlen? Und wenn sie schon fehlen dürfen, woher weiß sort dann mit was für Datentypen es umgehen muss?
 
Klammern:
weil compareObjects() falsch wäre ;) (zum einen würde es Paramter erwarten, die noch gar nicht verfügbar sind, zum anderen würde es vor "sort" Aufruf ausgewertet werden und ein "sort(0,10, true)" macht dann nicht soviel Sinn ;)

Datentypen:
Mit dem Programmnamen übergibst Du eine Referenz/Adresse auf die Funktion. Sort selbst nimmt die Elemente und ruft die Funktion mit diesen auf.
Es (sort) muss nix von den Datentypen wissen, sondern nur stupide "mysort(objX, objY)" aufrufen und die Rückgabe True/False auswerten ;).

Wie das allgemein intern umgesetzt wird?
K.A - dürfte auf den Compiler ankommen (und ich bin zu faul, nach den ISOs zu suchen und da zu blättern ;)).
Ein
Code:
void sort(void *buff, sizeblub, sizeblub, bool/int (*comparator_func)(void*, void*){ 
.... irgendwo:  
ret_val=comparator_func(obj1, obj2)...}
dürfte aber sehr wahrscheinlich sein (und zur Not kann man ja was zu "Function Pointern" suchen oder den Sort-Code nachschlagen ;) )
 
Zurück
Oben