繁体   English   中英

奇怪的功能

[英]Strange function

我在c ++中有一个函数声明,需要知道它是如何工作的:

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

第一个arg是类型x的对象。 以及如何描述第二个?

那是一个模板函数的声明,该函数返回一个整数并将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中工作,因为正如Daniel White在评论中所说,C没有模板。

第二种参数类型,其中x是一个类:

x(*)(x*)

表示“指向返回x并采用x*的函数的指针(*) 。例如:

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

它是指向返回x类型对象的函数的指针,并获得指向x类型指针的一个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM