pointer auf memberfunktion
-
typ:
typedef eg::digit (IInterface::*CallbackFunc)();
übergabe:
if(eg::success!=CoreInterface->RegisterCallback((eg::CallbackFunc)&WinVideo::MsgHandler))
aufruf(deque):
for(int i=0;i<mCallbacks.size();i++) (this->*mCallbacks[i])();
WinVideo und CoreInterface sind von IInterface abgeleitet(falls das überhaupt ne rolle spielt)
jedenfalls funktioniert es aber ich bin nich sicher ob es so richtig is weil die funktion MsgHandler ja eigentlich garkeine memberfunktion von IInterface is
was meint ihr?
-
nö, ist nicht OK. Entweder Templates verwenden oder eine abstrakte Klasse definieren und bei RegisterCallback den Zeiger auf die Implementierung übergeben und die Member-Funktion direkt aufrufen (falls Änderungen noch möglich sind).
-
weiss jemand warum das funktioniert?
vielleicht wär ne callbackklasse ne alternative von der ich alle interfaces die callbacks brauchen mit ableite
-
normalerweise müsstest du den Zeiger auf die Member-Funktion der Basis-Klasse übergeben und für das Objekt selbst - den Zeiger auf die abgeleitete Klasse (die Funktion muss natürlich virtual sein):
struct A { virtual void foo() = 0; }; struct B : A { void foo() { } }; void (A::* p)() = A::foo; B b; (b.*p)();