C++中的成员函数指针(member function pointer)提供了对类成员函数进行动态访问的机制。比如定义如下的类:
class Base
{
public:
void baseFunc();
};
那么可以定义成员函数指针:
void (Base::*mfp)() = &Base::*baseFunc;
并且通过下面的语句执行baseFunc()函数:
Base* baseObject = new Base();
(baseObject->*mfp)();
稍微麻烦一点,我们也可以定义一个Base类的继承类:
class Inherited : public Base
{
public:
void inheritedFunc();
};
毫无疑问我们可以像定义基类指针一样定义继承类的类成员函数指针,当然,我们也可以直接通过基类类成员函数指针来访问子类的成员函数,只需要按照如下的方式转换一下即可:
void (Base::*mfp)() = (void (Base::*)())( & Inherited::inheritedFunc );
(如果不加转换直接赋值的话,可能会出现类似如下的错误 cannot convert from Inherited::* to Base::*, conversion requires reinterpret_cast, C-style cast or function-style cast. )
class Base
{
public:
void baseFunc();
};
那么可以定义成员函数指针:
void (Base::*mfp)() = &Base::*baseFunc;
并且通过下面的语句执行baseFunc()函数:
Base* baseObject = new Base();
(baseObject->*mfp)();
稍微麻烦一点,我们也可以定义一个Base类的继承类:
class Inherited : public Base
{
public:
void inheritedFunc();
};
毫无疑问我们可以像定义基类指针一样定义继承类的类成员函数指针,当然,我们也可以直接通过基类类成员函数指针来访问子类的成员函数,只需要按照如下的方式转换一下即可:
void (Base::*mfp)() = (void (Base::*)())( & Inherited::inheritedFunc );
(如果不加转换直接赋值的话,可能会出现类似如下的错误 cannot convert from Inherited::* to Base::*, conversion requires reinterpret_cast, C-style cast or function-style cast. )