2012-01-16 93 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类型的指针的参数。