2012-01-16 122 views
1

我有在C++函數聲明,並且需要知道它是如何工作的:奇怪的功能

template<class x> 
    int fun(x, x(*)(x*)); 

的第一個參數是X類型的對象。以及如何描述第二個?

+3

不能在C中工​​作,因爲模板和類都是C++構造。 – 2012-01-16 19:27:27

回答

5

也就是說,返回一個整數,並採取,作爲參數,一個x和一個指針返回x和需要,作爲參數,一個x*的功能的模板函數的聲明。

零件x(*)(x*)是指「指向返回x並將x*作爲參數的函數的指針」的部分。第一個x是返回類型,(*)表示它是一個指向函數的指針(如果該參數有一個名稱,它將被寫爲x(*argname)(x*)),而第三個x*只是參數。

調用它是這樣的:

int f(int* iptr) { return something; } 

fun(4, f); // no need for the explicit template parameter because it can be deduced 

或者更一般

template<typename x> 
x functionname(x* xptr) { return something; } 

它會在C,因爲,正如丹尼爾·懷特說在註釋不行,C沒有模板。

4

第二個參數類型,其中x是一個類:

x(*)(x*) 

裝置「的指針(*)在返回x並採取x*一個函數,例如:

class MyClass {}; 
MyClass doit(MyClass* arg) { return *arg; } 
MyClass instance; 
int result = fun(instance, doit); 
+1

根據一個滿足這個條件的聲明:'x foo(x * bar)' – 2012-01-16 19:30:35

1

它是一個指針返回一個函數,返回類型爲x的對象,並獲得一個指向x類型的指針的參數。