Tuesday, June 19, 2007

Pointer to Member functions

excerpted from C++ Primer

函数指针不能被赋值为成员函数的地址,即使返回类型和参数表完全匹配. 成员函数有一个非成员函数不具有的属性--它的类 (its class). 成员函数指针首先必须被绑定到一个对象或者指针上,才能得到被调用的对象的this指针,然后才调用指针所指的成员函数.

Q: 如何获得成员函数的地址?
A: &Class_name::member_function_name; 必须赋给成员函数的指针.

成员函数的指针和指向类数据成员的指针都要求扩展的书法, 它要考虑类的类型.

指向成员操作符的指针 (.* or ->*)

int (Screen::*pmfi) () = &Screen::height;

Screen & (Screen::*pmfS) (const Screen &) = &Screen::copy;

//直接调用成员函数
if ( myScreen.height() == bufScreen->height())
bufScreen->copy (myScreen);

//通过成员指针的等价调用
if( (myScreen.*pmfi) () == (bufScreen->*pmfi) () )
(bufScreen->*pmfS) (myScreen);

静态类成员的指针是普通指针, 因为它们没有this指针.

No comments: