mem_fun
-
typedef bool (* compare_type) (value_type const &, value_type const &); compare_type compare; partition(begin,end,bin2nd(mem_fun(bool(compare)()),end);was mach ich da falsch? hat wer dazu eine idee
mfg
Valentin
-
Wenn mich nicht alles täuscht, erwartet mem_fun() einen Funktionszeiger, also benötigst du die Hälfte des angegebenen Parameters nicht wirklich:
partition(begin,end,bin2nd(mem_fun(compare),end));wobei ich nicht sicher bin, ob 'end' den richtigen Typ hat, um hier verwendet zu werden (partition() erwartet einen Iterator (PseudoPointer), bind2nd() etwas, was zum Parametertyp der verwendeten Funktion konvertierbar ist (also ein value_type-Derivat)).
-
begin,end sind iteratoren auf vector<value_type>
er mekert was wegen cannot deduce tempate argument.
würde es da noch eine andere möglichkeit geben ? damit ich das compare da rein bekomme?
-
Du benötigst vermutlich etwas anderes als zweiten Parameter für bind2nd() - end als vector::iterator lässt sich nicht in einen value_type umwandeln.
(*end würde zwar funktionieren, gäbe aber Laufzeitprobleme, *begin wäre eine Möglichkeit).
-
wieder die vier errors
schreib ich hingegen
partition(begin,end,bind2nd(mem_fun(bool(compare)()),*begin));mekert er das er
Error 2 error C2064: term does not evaluate to a function taking 0 arguments
komisch das teil.. ne idee wie ich dem partition sonst beibringen könnte mit einer zweistelligen predikaten funktion zu arbeiten?
-
mem_fun() erwartet einen Funktionspointer und liefert eine unary_function oder binaray_function zurück (je nach Parameterzahl der übergebenen Funktion). bind2nd erwartet eine binary_function und etwas, was zum zweiten Parameter transformiert werden kann, also benötigst du etwa so etwas:
value_type v=/* bestimme den passenden Wert */; partition(begin,end,bind2nd(mem_fun(compare),v));(wie schon oben gesagt - das "bool...()" drumherum verwirrt den Compiler nur und verursacht dann entsprechende Fehler.
-
genau so hatte ich es ja kommt aber so schöne meldungen wie
Error 1 error C2784: 'std::const_mem_fun1_t<_Result,_Ty,_Arg> std::mem_fun(_Result (__thiscall _Ty::* )(_Arg) const)' : could not deduce template argument for '_Result (__thiscall _Ty::* )(_Arg) const' from 'bool (__cdecl *)(const value_type &,const value_type &)'und das 4 mal und darum steig ich nicht ganz durch
-
*args - sorry, habe selbst eltwas durcheinandergebracht*
mem_fun() dient natürlich dazu, Memberfunktionen auzubereiten. Für globale Funktionen benötigst du ptr_fun().
-
mit tr1 hast der krampf mit mem_fun, mem_fun_ref, ptr_fun etc. zum glück endlich ein ende

-
std::tr1::bind benutzen, wie von Camper gesagt. Wenn keine tr1 vorhanden, geht natürlich auch boost::bind.
-
mal was anderes
Error 3 error C2529: '_Right' : reference to reference is illegal e:\program files\microsoft visual studio 8\vc\include\functional 312
Error 5 error C2529: '_Left' : reference to reference is illegal e:\program files\microsoft visual studio 8\vc\include\functional 318
Error 6 error C2529: '_Left' : reference to reference is illegal e:\program files\microsoft visual studio 8\vc\include\functional 323
Error 7 error C2535: 'bool std::binder2nd<_Fn2>::operator ()(const some_type &(&)) const' : member function already defined or declared e:\program files\microsoft visual studio 8\vc\include\functional 324irgendwie mag mich das teil nicht