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

时间:2011-12-01 15:04:38

标签: c++ function-pointers member-pointers

帮助我理解以下代码段:

(foo.h中)

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

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

   private:
        Handler handler_;
};

(mytype.h)

class MyType
{
     public:
          MyType() { }
          void fun1() { }
          void fun2() { }    
};

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

有人可以在这里发光吗?真的很困惑:S

2 个答案:

答案 0 :(得分:5)

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

FAQ Lite entry

答案 1 :(得分:1)

指向MyType成员函数的指针返回void并将指针指向SomeOtherType作为参数。