STL Functors
-
Hi,
Der STL kann man ja seine eigenen Funktionen so zuschneiden, dass die Algorithmen sie schlucken.
So zum Beispiel:std::for_each(objects_[begin(), objects_end(), std::mem_fun(&ObjectBase::draw));
Nur ist es jetzt so, dass draw zwei Parameter entgegennimmt bzw. zumindest entgegennehmen kann.
virtual void draw(double x=0, double y=0)
Wie muss man das machen, damit ich die Aufrufe wie oben durch for_each machen kann, aber über die ganze schleife draw immer mit den selben zwei Parametern aufgerufen wird?
Ich bin zwar schon auf die bind Funktionen gestossen, aber sobald man damit einen Parameter "gebindet" hat, hat man ja eine Funktion mit nur einem Parameter. Vielleicht sehe ich die Lösung vor lauter Funktoren nicht, aber ich find einfach nichts in der STL, das den Parameter einer unären Funktion bindet.
Wie geht das also?
-
hab rgad in dr hilfe nachgeschaut:
wenns ne methode ist, bastelst du dir erstmal nen std::mem_fun zusammen, und packst das in nen functor der im ctor die beiden argumente nimmt
-
packst das in nen functor der im ctor die beiden argumente nimmt
Soweit bin ich auch. Ich hab nur angenommen diesen Functor gibts schon in der STL oder er liesse sich zumindest aus dene in der STL konstruieren.
-
Ich hoffe, ich habe das jetzt richtig verstanden. Suchst du sowas:
boost::bind?
-
ja sowas hätte ich gesucht. hab jetzt aber einfach selber einen entsprechenden functor gebastelt:
template<class R, class T, class A1, class A2> class mem_fun_bind2_t { public: explicit mem_fun_bind2_t(R (T::*pmf)(A1, A2), A1 a1, A2 a2) : pmf_(pmf), a1_(a1), a2_(a2) {} R operator()(T *obj) { return (obj->*pmf_)(a1_, a2_); } private: R (T::*pmf_)(A1, A2); A1 a1_; A2 a2_; }; template<class R, class T, class A1, class A2> mem_fun_bind2_t<R, T, A1, A2> mem_fun_bind2(R (T::*pmf)(A1, A2), A1 a1, A2 a2) { return mem_fun_bind2_t<R, T, A1, A2>(pmf, a1, a2); }
danke für die hilfe.