2011-12-01 41 views
1

幫助我理解下面的代碼片段:奇數語法:範圍運算符後的星號(::)?

(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

回答

5

void (MyType::*)(SomeOtherType* t)是指向類MyType中的成員函數的指針,該函數接受一個參數(指向SomeOtherType的指針)並不返回任何內容。

FAQ Lite entry

+0

Wowsers。我不知道這樣的事情存在。更糟糕的是,語法完全是鈍的。這些只是個人的抱怨。 非常感謝! – Daniel

+0

@Daniel:好消息是你不必使用那種蹩腳的語法。看看'std :: function'和'std :: bind'(或者'boost :: function' /'boost :: bind',如果你仍然使用C++ 03的話)。 –

+1

@CatPlusPlus你可能還會提到':: *'是一個單一的標記,而不是'::'和'*'的連接。原始問題中的措詞使我認爲海報並不知道這一點。 –

1

指向MyType成員函數的指針返回void並將指針指向SomeOtherType作爲參數。