2015-05-22 35 views
-4

能否请您解释一下与例如C++函子解释

语句1

下面的语句

普通功能有不同的类型,只有当他们的签名。但是,当功能对象的签名相同时,它们可以有不同的类型 。实际上,由函数对象定义的每个函数行为都有其自己的类型。这是一个显著 改进使用模板泛型编程,因为你可以通过 功能行为作为模板参数

+1

你懂什么?你做了什么研究?声明来自哪里,其他声明在哪里? – Useless

+0

需要更多上下文。 –

回答

5

普通功能有不同的类型,只有当他们的签名。

这意味着这些功能都具有相同的类型int(int)

int f1(int); 
int f2(int); 

,而这有不同的类型void(int)

void f3(int); 

然而,函数对象可以在具有不同类型的签名是相同的。

含义,这两个类是不同类型的(如不同类始终是):

class c1 {int operator()(int);}; 
class c2 {int operator()(int);}; 

实际上,通过一个函数对象中定义的每个功能行为有它自己的类型。

我不知道作者的意思是“功能行为”,但我认为这只是重申两个类的类型是分开的类型。

这是使用模板的泛型编程一个显著的改善,因为你可以通过功能行为作为模板参数

也就是说,你可以指定一个函数类作为模板类型参数:

temp<c1> thing_using_c1; 
temp<c2> thing_using_c2; 

但是你不能指定一个普通的函数,你需要以某种方式提供函数:

temp<int(int)> thing_using_f1(f1); 
temp<int(int)> thing_using_f2(f2); 
-1

不同的类可以具有不同的功能,具有相同的名称及其参数。但一般非类功能不可能