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.