#include "iostream"
using namespace std;
class CCObject
{
};
class base:public CCObject
{
private:
int value;
public:
base()
{
value = 314;
}
public:
void f()
{
std::cout<<value<<std::endl;
}
};
typedef void (CCObject::*SEL_SCHEDULE)();//typedef隐藏数据类型,SEL_SCHEDULE表示成员函数指针的类型
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
int main()
{
base* mybase = new base();
//SEL_SCHEDULE abc = schedule_selector(base::f);
SEL_SCHEDULE abc = (SEL_SCHEDULE)(&base::f);// (SEL_SCHEDULE)是强制转换,因为base和CCObject是不同的类(这行跟上面一行是一样的)
// void CCObject::*ptrFun abc = (void CCObject::*ptrFun())(&base::f);
CCObject* obj = new CCObject;
(obj->*abc)();//这里不能输出正常的value值,因为不是用base的实例去调用
(mybase->*abc)();//这里要求mybase继承CCObject,否则编译错误
void (CCObject::*ptrMemeberFunc)();
//ptrMemeberFunc = (&base)::f;
return 0;
}
输出:
-33686067
314