奇怪语法:作用域操作符(::)后面有星号

Odd syntax: asterisk after scope operator (::)?

本文关键字:语法 作用域 操作符      更新时间:2023-10-16

帮助我理解下面的代码片段:

(foo)

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中的类型定义在这里声明了什么?我可以看到它是某种函数指针但是星号的意义是什么?它似乎是取消引用类型(?? ?),并以某种方式试图"附加"新类型定义的指针到MyType的类型(?!?)。

谁能给我点灯一下吗?S

void (MyType::*)(SomeOtherType* t)是指向MyType类成员函数的指针,该函数接受一个参数(指向SomeOtherType的指针),不返回任何值。

FAQ life条目

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