如何通过指针调用函数?

时间:2014-12-15 02:25:46

标签: c++

我有一些基类,我在其中存储一个指向派生类函数的指针。我需要通过它的指针从两个地方调用一个函数:从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 *'

1 个答案:

答案 0 :(得分:4)

( this->*funcPtr )();

是用于调用funcPtr的错误语法,因为funcPtr的类型为void T::*()

您需要使用:

( (static_cast<T*>(this))->*funcPtr )();