2012-10-11 31 views
2

可能重複:
What does void(U::*)(void) mean?回調函數的語法

考慮以下幾點:

template <class T> 
class myButtoncb { 
    private: 
     T *ptr; 
     void (T::*cback) (void) 
} 

我的理解是:

void (*cback) (void) 

這不過是一個函數指針,它指向返回void且不帶參數的函數。

我不明白的是T::的重要性是什麼?宣佈 僅僅像void (*cback) (void)還不夠嗎?

+0

-1張貼愚弄的人(即使這不是愚弄的人,應該是從基本的C很明顯++語法這是什麼意思。) – 2012-10-11 06:59:28

回答

2

這就是說,它是一個具有this指針的成員函數。否則,它將是一個自由函數,不會有任何想法它正在操作什麼對象,並且將無法訪問任何非靜態成員函數或成員變量。

+0

這是一個不錯看它的方式。 :)。 – Whoami

1

C++ FAQ

是「指針到成員函數」不同於「指針到功能」的類型?

是的。

Link我已經提供給你的信息有很多關於這個話題的信息。

+0

對於有用的鏈接+1! – besworland

+0

@besworland鏈接並不差,但並不存在真正的信息。另外,直接提供信息可以說[比提供鏈接更好](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers) 。 – jogojapan

+0

@jogojapan我的答案不僅提供了進一步閱讀的鏈接,而且還給出了精確的答案:「是否僅僅像void(* cback)(void)一樣聲明?」 –

0

您傳遞的函數必須在類T中聲明 - myButtoncb的模板參數。所以,你可以使用如下的功能:

class A 
{ 
public: 
    void foo(void); 
}; 


myButton<A> b; 
b.cback = &A::foo;