我有一些基类,我在其中存储一个指向派生类函数的指针。我需要通过它的指针从两个地方调用一个函数:从BaseClass和派生类。
template < class T >
class BaseClass {
private:
typedef void ( T::*FunctionPtr ) ();
FunctionPtr funcPtr;
public:
void setFunc( FunctionPtr funcPtr ) {
this->funcPtr = funcPtr;
( this->*funcPtr )(); // I need to call it here also but it doesn't work
}
};
class DerivedClass: public BaseClass < DerivedClass > {
public:
void callMe() {
printf( "Ok!\n" );
}
void mainFunc() {
setFunc( &DerivedClass::callMe );
( this->*funcPtr )(); // works fine here
}
};
错误:左手操作数为 - &gt; *必须是指向与右手操作数兼容的类的指针,但是'BaseClass *'
答案 0 :(得分:4)
( this->*funcPtr )();
是用于调用funcPtr
的错误语法,因为funcPtr
的类型为void T::*()
。
您需要使用:
( (static_cast<T*>(this))->*funcPtr )();