与虚拟成员函数相反,我需要一个解决方案,其中可以注册在每个级别类派生中实现的函数以供基类以后调用。(不仅仅是最衍生的实现)
为此,我正在考虑为派生类提供一种机制,以便在派生类构造函数期间向基类注册其功能。
不过,我在使用成员函数指针参数时遇到了问题。我在想 Derived 是从 Base 派生的,this
应该自动转换指针。
这可以接近我正在尝试的方法还是我需要使用静态成员函数void *
,和static_cast
?
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 ) {};
}
编译器错误:
error: no matching function for call to 'Derived::registerPrepFn(void (Derived::*)(int))'
note: candidates are: 'void Base::registerPrepFn(void (Base::*)(int))'