pointer to member function
-
Hi:
class A { public: A (int x) : my_x(x) {} float do_something (float f) { return my_x + f; } private: int my_x; }; class B { public: typedef float (*pt2Func)(float); B(pt2Func f) {my_f=f;} private: pt2Func my_f; }; A a(7); // Wie jetzt B mit a.do_something Konstruieren?Kann jemand helfen?
Danke im vorraus!
-
Funktionszeiger funktionieren nur mit statischen member funktionen
-
Hmmm,
aber do_something kann ich nicht statisch machen, da es my_x benutzt ... also unmoeglich ein B mit A.do_something zu konstruieren?
-
pointerer schrieb:
Hmmm,
aber do_something kann ich nicht statisch machen, da es my_x benutzt ... also unmoeglich ein B mit A.do_something zu konstruieren?
Du kannst es wrappen:
struct A { //... static static_DoSth(A*,f) { A->do_something(f); } }; // ... B( &A::static_DoSth );Du musst halt bei jedem Aufruf dein A pointer haben ...
-
pointerer schrieb:
aber do_something kann ich nicht statisch machen, da es my_x benutzt ... also unmoeglich ein B mit A.do_something zu konstruieren?
Kurz erklärt:
Eine Funktion "void Foo(int)" und eine statische Methode "void Bar::Foo(int)" können mit einen Zeiger angesprochen werden.Eine nicht-statische Methode "void Bar::Foo(int)" benötigt aber zudem einen Instanzzeiger (das was du vielleicht als this kennst). Daher reicht ein Zeiger nicht aus.
cu André
-
Was Funktionszeiger und Memberfunktionszeiger betrifft: Auf http://www.newty.de/fpt/index.html werden diese recht gut erklärt.