bind1st und Memberfunc



  • Folgendes sei gegeben

    class Bar
    {
    public:
       int GetValue() const
       { return TheValue ; }
    } ;
    
    std::vector<Bar> MyVector ;
    binder1st<equal_to<int>equal_to_10=bind1st(equal_to<int>(),10) ;
    find_if(MyVector.begin(),MyVector.end(), ....
    

    Wie muss ich find_if formulieren ,daß ich mittels der Memberfunc GetValue und
    equal_to_10 der Wert gefunden wird.
    Ist eventuell equal_to_10 falsch formuliert ?



  • Du mußt in deinen Funktor auf jeden Fall noch einen Verweis auf Bar::GetValue() einbauen (dazu brauchst du mem_fun(&Bar::GetValue)). Aber frag' mich jetzt nicht, wie du das richtig zusammenbauen kannst - vermutlich ist es einfacher, einen eigenen Vergleichsfunktor zu schreiben.



  • Mit mem_fun ist schon klar.
    Habe jetzt der Klasse einfach noch eine Memberfunction spendiert und mach das Ganze jetzt einfach so :

    bool Bar::IsValueEqualTo(int Value) const
    {
      return GetValue()==Value ;
    }
    
    find_if(MyVector.begin(),MyVector.end(),boost::bind(Bar::IsValueEqualTo,_1,10)) ;
    

    Funktioniert ohne Probleme.Die andere Version hätte mich sehr interessiert,
    da ich solche Probleme öfters habe und mir die Memberfunction einfach sparen will.



  • Die Binder aus std würde ich nicht mehr benutzen. Denn schliesslich gibts jetzt den std::tr1::binder, der viel komfortabler ist. boost:binder ist soweit i.O.


Anmelden zum Antworten