指向成员函数的指针是C++中比较复杂的语法结构,然而,它却是事件驱动和多线程环境中不可缺少的,特别是当从外部调用成员函数的时候。在多线程里,每一个线程都通过指向成员函数的指针调用这一函数。如果C++没有这些语法特性,那么在很多情况下进行C++程序开发会遇到很多麻烦。
也许你开始会被这一性质的语法吓倒,但当你熟悉之后你就会觉得它相当方便,并且可以通过使用typedef声明来简化。这一节里我将讲述如何声明一个指向成员函数的指针,赋一个值给它,通过这一指针调用函数。
一个指向成员函数的指针包括成员函数的返回类型,带::符号的类名称,函数参数表。虽然这一语法看似复杂,其实它和普通的指针是一样的。指向外部函数的指针可如下声明:
void (*pf)(char *, const char *); void strcpy(char * dest, const char * source); pf=strcpy;
void (A::*pmf)(char *, const char *);以上pmf是指向类A的一个成员函数的指针,传递两个变量char *和 const char *,没有返回值。注意星号前面的A::符号,这和前面的声明是一致的。
为了给一个指向成员函数的指针赋值,可以采用成员函数名并再其前面加一个&的方式,代码范例可参见Listing A。虽然一些旧的编译器可以忽略&号,但在标准C++中是不允许的。