Syntax von mem_fun
-
Hallo!
Ich habe einen
vector<Border*> vBorders;
der sortiert werden soll. Die Border-Klasse selbst besitzt die Methode
bool Border::operator<(const Border& other) const { }
Laut Dokumentation sind die Template-Parameter für mem_fun<S,T,A>:
S Return type of member function.
T Type (class) of which the member function is a member.
A Type of the argument taken by the member function (if any).aber das hier:
sort(vBorders.begin(),vBorders.end(),mem_fun<bool,Border,const Border>(&Border::operator<));
liefert
error: no matching function for call to ‘mem_fun(bool (Border::*)(const Border&)const)’
wo liegt der Fehler?
-
Warum ist operator< bei dir eine Memberfunktion? Mach sie zu einer freien Funktion. Dann erledigt sich dein Problem ganz von alleine.
-
Der Aufruf selbst ist schlicht
std::mem_fun(&Border::operator<)
Die Template-Parameter leitet der Compiler aus dem Parameter her (mem_fun ist eine Funktionsvorlage).
Das wird dich aber insofern nicht weiterbringen, als dass dein Vektor Border* beinhaltet und diese sich nicht in Border const & stopfen lassen.
-
Michael E. schrieb:
Warum ist operator< bei dir eine Memberfunktion? Mach sie zu einer freien Funktion. Dann erledigt sich dein Problem ganz von alleine.
Meinst Du das:
bool operator<(const Border& p0,const Border& p1)
{
..
}Das hat zwei Parameter. Wie verwende ich das dann mit sort(..)?
-
mfun schrieb:
Das hat zwei Parameter. Wie verwende ich das dann mit sort(..)?
Wie bei jedem anderen Typen auch: Du brauchst es gar nicht als Parameter anzugeben:
vector<Foo> bar; // bar füllen sort(bar.begin(), bar.end()); // funktioniert, wenn es einen operator< für Foo gibt
Da du hier mit Zeigern arbeitest, läuft das leider nicht mehr automatisch und du musst einen Funktionspointer auf deine Funktion übergeben, sprich &funktionsname.