今天在看《STL源码剖析》的函数适配器那一章节的时候,看到出现这种语法(p->*f)(),以前从来没注意到->*的用法,于是查了一些资料。
C++中->*运算符主要是结合成员指针(pointer-to-member)进行使用,所谓的成员指针是指向类成员变量或者成员函数的指针。注意这里说类,并没有说对象。这是是因为实际上它仅仅是一个偏移量,并与任何对象都没有关系。
指向成员指针的例子如下:
#include <iostream>
- using namespace std;
- class Data {
- public:
- int a,b,c;
- void printf() {
- cout << a << " " << b << endl;
- }
- };
- int main() {
- Data d;
- Data * pd = &d;
- // 声明一个指向Data类中a成员的一个指向成员变量的指针
- int Data::*mem = &Data::a;
- // 有两种取得指针指向内容的方法,这是第一种:通过对象的指针访问
- pd->*mem = 4;
- mem = &Data::b;
- // 第二种访问方式
- d.*mem = 10;
- // 以我们熟悉的方式调用函数
- pd->printf();
- // 声明一个指向Data::print()的一个成员函数指针
- void (Data::*ptr)();
- ptr = &Data::printf;
- // 同样有两种调用方式
- (pd->*ptr)();
- (d.*ptr)();
- return 0;
- }
注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。
转载网址:http://blog.csdn.net/dongtianzhe/article/details/4103978