Callback to Member Function
-
hallo,
wie kann ich in C++ einen Callback auf eine C++ Member Function implementieren, die nicht static ist?A a; DoItA(&a, A::Callback);
cu
-
struct A { void Callback(); void Test(); }; void DoItA( A & a , void (A::*meth_ptr)() ) { (a.*meth_ptr)(); } int main() { A a; DoItA( a , &A::Callback ); DoItA( a , &A::Test ); }
-
muss die DoItA immer außerhalb der class sein?
-
Warum sieht man oft eine static Callback function?
-
noch ein beispiel, klasse das sowas geht;-)
class A { public: void Callback(std::string text) { cout << text << endl; } }; void DoItA(A & a, void (A::*meth_ptr)(std::string), std::string text) { (a.*meth_ptr)(text); } int main() { A a; DoItA(a, &A::Callback, "Hallo"); }
wo braucht man solche Callbacks, ich nehm mal an in GUI Frameworks? was sind deren Vorteile?
-
Timi schrieb:
muss die DoItA immer außerhalb der class sein?
Nee muss nicht aber in der Klasse von A macht das in dem Fall wenig sinn.
Timi schrieb:
Warum sieht man oft eine static Callback function?
Weil es einfach bequemer zu verwenden ist, denke ich mal. Aber ich hab dafür Callbackext ( http://developer.berlios.de/projects/callbackext bzw http://callbackext.berlios.de )
Timi schrieb:
wo braucht man solche Callbacks, ich nehm mal an in GUI Frameworks? was sind deren Vorteile?
Ich empfinde Callbacks Praktisch wenn man Sie in einen Funktor packt. ( siehe Callbackext )
Es ist halt sehr flexibel. Man kann die Callbacks austauschen etc. Aber der Frage ( Vorteile von Funktoren ) sollte sich besser jemand anderes annehmen *g*