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.


Log in to reply