说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何用函数指针取成员函数的地址????

编辑:说三道四文库 发布时间:2018-08-20 03:03
HTML文档下载 WORD文档下载 PDF文档下载
有如下的类,我要直接得到成员函数的地址,可惜不成功,该如何解决?

class SHOW
{
void show1();
void show2();
public:
void (*show)();
void setshow(int i);
void run(int i);
};

void SHOW::run(int i)
{
setshow(i);
show();
}

void SHOW::setshow(int i)
{
if(i == 0)
show = show1;
else
show = show2;
}

void SHOW::show1()
{
printf("正在显示show1");
}

void SHOW::show2()
{
printf("正在显示show2");
}
手头没有编译器,成员函数的地址指针是
typedef void (*SHOW::show)
同一楼上!
并补充:
并将成员函数改为static;
class CTest
{
public:
void f(void){cout<<"CTest::f()"<<endl;}
static void g(void){cout<<"CTest::g()"<<endl;}
virtual void h(void){cout<<"CTese::h()"<<endl;}
};
void main()
{
typedef void (*GFPtr)(void);
GFPtr fp=CTest::g;

fp();

typedef void (CTest::*MemFuncPtr)(void);
MemFuncPtr mfp_1=&CTest::f;
MemFuncPtr mfp_2=&CTest::h;
CTest theObj;
(theObj.*mfp_1)();
(theObj.*mfp_2)();

CTest *pTest=&theObj;
(pTest->*mfp_1)();
(pTest->*mfp_2)();
}
输出结果:
CTest::g()
CTest::f()
CTest::h()
CTest::f()
CTest::h()
ok
void (*show)();
这个声明有问题吧.没有指针类型.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘