Нечетный синтаксис: звездочка после оператора области (: :)? - PullRequest
1 голос
/ 01 декабря 2011

Помогите мне понять следующий фрагмент кода:

(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() { }    
};

Что именно здесь объявил typedef в foo.h? Я вижу, что это какой-то указатель на функцию, но в чем смысл звездочки? Похоже, что он отменяет ссылку на тип (??) и каким-то образом пытается «прикрепить» вновь указатель typedef на тип MyType (?!?).

Может кто-нибудь пролить свет здесь, пожалуйста? Действительно смущен: S

Ответы [ 2 ]

5 голосов
/ 01 декабря 2011

void (MyType::*)(SomeOtherType* t) - указатель на функцию-член в классе MyType, который принимает один аргумент (указатель на SomeOtherType) и ничего не возвращает.

FAQ Lite entry .

1 голос
/ 01 декабря 2011

Указатель на функцию-член MyType, возвращающую void и принимающую указатель на SomeOtherType в качестве параметра.

...