pointer to member operator
英語版Wikipedia の C++ の演算子の項目を見てたら見慣れないものが。
Operator Name Syntax Is overloadable? In C? Dereferencing Member Operator a.*b No No Dereferencing Array Operator a->*b Yes No
なにこれ、知らねー。常識?とりあえず、使い方を調べてみた。
#include <iostream> struct Foo { int a; Foo(int n) : a(n) {} int func() { return a; } }; int main() { using namespace std; Foo foo(10); Foo* pFoo = new Foo(20); int (Foo::*f)(void) = &Foo::func; int Foo::*member = &Foo::a; cout << (foo.*f)() << endl << (pFoo->*f)() << endl << foo.*member << endl << pFoo->*member << endl; delete pFoo; return 0; }
こんな感じか。要するに、member pointer の dereference だな。知らんかった。まぁ普段 C++ を使わないし、使ってもこんなのを直接使う必要ほとんどないもんなぁ。標準ヘッダ見ると std::mem_fun ぐらいにしか使ってないし。Boost は boost::mem_fn 以外にも boost::spirit なんかでも使っているけど。
ちなみに、Wikipedia には Dereferencing Member Operator(Array ってのは多分 Arrow のミスだろう)とあるが、検索しても Wikipedia のページしか出てこない。他のページを見る限り Pointer to Member Operator というのが普通っぽい。
しかし int (Foo::*f)(void) = &Foo::func;とか int Foo::*member = &Foo::a; なんて Syntax はもう意味分からんね。