Jak zarejestrować wskaźnik funkcji pochodnej klasy za pomocą klasy bazowej
W przeciwieństwie do wirtualnych funkcji składowych, potrzebuję rozwiązania, w którym funkcja zaimplementowana na każdym poziomie pochodnej klasy może być zarejestrowana do późniejszego wywołania przez klasę bazową. (Nie tylko najbardziej pochodna implementacja)
Aby to zrobić, myślałem o udostępnieniu mechanizmu dla klas pochodnych do rejestrowania ich funkcji w klasie bazowej, takiej jak podczas konstruktora klasy pochodnej.
Mam jednak problem z argumentem wskaźnika funkcji członka. Myślałem, że Derived pochodzi od Base, thethis
wskaźnik powinien być automatycznie rzutowany.
Czy można to zrobić w pobliżu tego, co próbuję lub czy muszę użyć statycznych funkcji składowych,void *
, istatic_cast
?
<code>class Base { protected: typedef void (Base::*PrepFn)( int n ); void registerPrepFn( PrepFn fn ) {}; } class Derived : public Base { Derived() { registerPrepFn( &Derived::derivedPrepFn ); }; void derivedPrepFn( int n ) {}; } </code>
Błąd kompilatora:
<code>error: no matching function for call to 'Derived::registerPrepFn(void (Derived::*)(int))' note: candidates are: 'void Base::registerPrepFn(void (Base::*)(int))' </code>