C++ Functors解释

-4 c++ functor c++11

能否请您举例说明以下陈述

语句1

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

Mik*_*our 5

普通函数只有在签名不同时才有不同的类型.

这意味着这些函数具有相同的类型int(int):

int f1(int);
int f2(int);
Run Code Online (Sandbox Code Playgroud)

虽然这有不同的类型 void(int)

void f3(int);
Run Code Online (Sandbox Code Playgroud)

但是,当函数对象的签名相同时,它们可以具有不同的类型.

这意味着这两个类是不同的类型(总是不同的类):

class c1 {int operator()(int);};
class c2 {int operator()(int);};
Run Code Online (Sandbox Code Playgroud)

实际上,函数对象定义的每个函数行为都有自己的类型.

我不确切地知道作者在"功能行为"中的含义,但我认为这只是重述两种类型是不同的类型.

这是使用模板进行泛型编程的重大改进,因为您可以将功能行为作为模板参数传递

这意味着您可以将函数类指定为模板类型参数:

temp<c1> thing_using_c1;
temp<c2> thing_using_c2;
Run Code Online (Sandbox Code Playgroud)

但是你不能用这种方式指定普通函数,你需要以其他方式提供函数:

temp<int(int)> thing_using_f1(f1);
temp<int(int)> thing_using_f2(f2);
Run Code Online (Sandbox Code Playgroud)