C++指向成员函数指针

C++的语法总是会隐藏在一些边角上的语法,让你觉得还能这么干。最近在了解boost::bind的时候发现了这个语法,之前都不了解这个语法的。拿出来介绍一下,也算记录一下。这个语法在boost::bind还有Inside C++ Object Model中都有用到。 代码和表达均来自与ref[1]。 成员函数指针 废话不多说,上代码: class Foo { public: int f(string str) { cout<<"Foo::f()"<<endl; return 1; } }; int main() { int (Foo::*fptr)(string) = &Foo::f; Foo obj; (obj.*fptr)("str"); Foo *p = &obj; (p->*fptr)("str"); } 如上代码所示, int (Foo::*fptr)(string)定义了一个Foo类中的一个成员函数指针,其指向了Foo::f函数。相比起普通函数存放的是函数所指向的地址,其存放的是这个函数在类中相对的offset,这样只要是有相同的内存offset的均能互相转换。 所以要调用它,必须绑定在对应的class object的地址上,才能调用该函数。 ...

2017-10-15 · qhsong