2009-10-10 82 views
2

我想有指針類的方法,所以我有這樣的:指針類方法

class foo { 
    public: 
    static void bar() { 
} 
}; 

void (foo::*bar)() = &foo::bar; 

無法編譯:(我得到:

> error: cannot convert ‘void (*)()’ to 
> ‘void (foo::*)()’ in 
> initialization 

回答

4

靜態方法,當按名稱使用而不是調用時,是一個指針。

void (*bar)() = foo::bar; // used as a name, it's a function pointer 
... 
bar(); // calls it 
+0

TNX很多關於快速回答:) – mfolnovich 2009-10-10 12:59:19

+3

不,這不是一個指針,它是一個函數。它雖然會*衰減*到函數指針。 – avakar 2009-10-10 14:13:15

+0

哪一點更重要? – Will 2009-10-10 16:55:31

2

指針到靜態構件具有相同的類型的指針,非成員

嘗試:

void (*bar)() = &foo::bar; 
+0

TNX很多關於快速回答:) – mfolnovich 2009-10-10 13:01:10

2

bar()是一個靜態函數,換句話說沒有this參數。

void (*myfunptr)() = &(foo::bar); 
+0

TNX很多關於快速回答:) – mfolnovich 2009-10-10 13:04:00