奇怪的语法:范围运算符后的星号(::)?

Dan*_*iel 1 c++ function-pointers member-pointers

帮助我理解以下代码片段:

(foo.h中)

class Foo
{
   public:
        typedef void (MyType::*Handler)(SomeOtherType* t);

        Foo(Handler handler) : handler_(handler) { }

   private:
        Handler handler_;
};
Run Code Online (Sandbox Code Playgroud)

(mytype.h)

class MyType
{
     public:
          MyType() { }
          void fun1() { }
          void fun2() { }    
};
Run Code Online (Sandbox Code Playgroud)

foo.h中的typedef究竟是什么声明?我可以看到它是某种函数指针,但星号的意义是什么?它似乎是取消引用一个类型(??)并以某种方式试图将新typedef指针"附加"到MyType类型(?!?).

有人可以在这里说清楚吗?真的很困惑:S

Cat*_*lus 5

void (MyType::*)(SomeOtherType* t)是一个指向类MyType中成员函数的指针,它接受一个参数(指向SomeOtherType)并且不返回任何内容.

常见问题Lite入门.