【问题标题】:C++ Functors explanation [duplicate]C++ 函子解释 [重复]
【发布时间】:2015-08-04 11:22:03
【问题描述】:

你能用例子解释一下下面的语句吗

声明1

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

【问题讨论】:

  • 你明白什么?你做了什么研究?语句来自哪里,其他语句又在哪里?
  • 需要更多上下文。

标签: c++ c++11 functor


【解决方案1】:

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

意思是这两个函数都具有相同的类型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);

【讨论】:

    【解决方案2】:

    不同的类可以具有相同名称和参数的不同函数。但一般来说非类函数是不可能的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-26
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多