C ++ Functors解释

时间:2015-05-22 12:23:12

标签: c++ c++11 functor

请您用示例

解释以下陈述
  

语句1

     

普通函数只有在签名不同时才有不同的类型。但是,函数对象可以具有不同的类型   当他们的签名是相同的。实际上,每个功能行为   由函数对象定义的有自己的类型。这是一个重要的   使用模板改进通用编程,因为你可以   将功能行为作为模板参数传递

2 个答案:

答案 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 :(得分:-1)

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