类成员函数指针浅析
有这样一行代码:
typedef CPB _ RETVAL(CPB PRB _ PRB::* CPB PRB _ Action)(CPB PRB _ PRB &,无符号);
其中CPB_RETVAL是枚举类型,CPBprb_Prb是类,并且CPBprb_action没有在代码的其他地方定义。我也不知道这行代码是什么意思,就贴在论坛上问http://topic . csdn . net/u/2008 09 08/11/0f 127830-8c 90-414d-9 Bab-5d 946t 15522 . html?seed=1500702230 .
感谢很多专家的评论,我知道前面的代码定义了成员函数的指针类型CPBprb_action,它有两个参数,类型是CPBprb_Prb &,unsigned,返回值类型是CPB_RETVAL。这个函数指针的类型有一个域,这个域是类CPB Prb _ Prb(CPB Prb _ Prb::* CPB Prb _ action)的成员。
另外,CPBprb_action不仅可以指向CPBprb_Prb的成员函数,还可以指向CPBprb_Prb的派生类的成员函数。甚至,CPBprb_Prb可能根本没有CPB _ RETVAL函数名(CPB Prb _ Prb & amp,unsigned)之类的函数,但CPB _ RETVAL函数名(CPBprb_Prb & amp,unsigned)可能会加在CPB PRB _ PRB的派生类中;诸如:
# include
class a
{
public:
a(){ };
virtual ~ A(){ };
};
B类:public A
{
public:
B(){ };
~ B(){ };
int Fb(int a){ return a * a;}
};
typedef int(A::* my function)(int);
int main()
{
B * pB = new B;
my function pf =(my function)(& B::Fb);
int retValue =(pB-> * pf)(3);
STD::cout > retValue;
return 1;
}
via typedef int(A::* my function)(int);定义的Myfunction是的成员(函数指针),但它只能在类外部定义。
需要指出的是,使用指向成员函数的指针变量是很危险的!因此,不建议这样做。
(上面引用了我在论坛的帖子的回复,再次感谢关心和帮助我的人。)
PS:
函数指针(全局函数/类成员函数)和函数对象
(原文链接:http://www.ccrun.com/article.asp? I = 1005 & d = sc 370g)
关键词:函数指针全局函数类成员函数对象函数对象
作者:ErranLi更新时间:2007-01-06 02:31:47浏览次数:9166
函数指针(全局函数/类成员
0条评论