2011-03-18 33 views
8

回想一下,我發現可以編寫一個C++函數,它使用函數類型的參數(而不是函數指針類型!)。例如,以下是一個函數,它接受一個回調函數,並返回一個double:在C++中傳遞函數類型的參數是什麼意思?

void MyFunction(double function(double)); 

我的問題是什麼意思有功能類型的變量,因爲你不能宣佈一個在其他任何情況下。從語義上講,它與函數指針或函數引用有什麼不同?函數指針和函數類型的變量之間有什麼重要的區別,我應該知道嗎?

+0

我從來沒有見過像這樣的C++。 – 2011-03-18 19:09:43

+0

據我所知在C++中是不可能的。你能舉一個例子嗎?這可能嗎? – 2011-03-18 19:14:29

+0

這是像數組速記'arrData ==&arrData [0]''但我沒有看到它,因爲'boost :: function'出現在看到的和當lambda函數完全支持,將改變的東西太。 – AJG85 2011-03-18 19:35:37

回答

13

就像void f(int x[])相同void f(int* x),下面的兩個是相同的:

void MyFunction(double function(double)); 
void MyFunction(double (*function)(double)); 

或者,在官方語言(C++ 03 8.3.5/3),確定函數的類型時,

確定每個參數的類型,類型的任何參數「陣列的T」或後「函數返回T」調整爲「指針T」或「函數指針返回T「,分別。

+0

太棒了!這完全回答了我的問題。 – templatetypedef 2011-03-18 19:18:02

+0

+1。這非常有說服力! – Nawaz 2011-03-18 19:43:36

+3

有些情況下,ISO標準清晰易懂。 – 2011-03-18 20:10:19

相關問題