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>

questionAnswers(2)

yourAnswerToTheQuestion