Functor这个词在C++中相当有名。Functor很像一个类,它的行为就像一个函数或方法。它可以让你制造一些类似于函数的对象,并且可以使用操作符()。简单地说,向量是那些可以作为函数或类似的对象。当用户想在一个函数中传递一个以上的参数而该函数又不允许时,这些对象就很有用。今天,我们将在Ubuntu 20.04中学习C++中的functors。首先,用Ubuntu 4桌面上的 "Ctrl+Alt+T "快捷键打开shell终端。
例子1:
让我们开始我们的第一个例子,在shell中建立一个新的C++文件。为此将使用非常著名的 "touch "命令。制作完C++文件后,你需要一个编辑器来打开它。Gnu Nano "编辑器是最值得推荐的一个。因此,我们一直在使用 "nano "编辑器来打开它,并在其中创建一个C++代码。

文件打开后,开始你的代码,在它的顶部包括 "输入-输出 "流头。标准命名空间已经给出;"Func "类已经开始。在这个类中已经实现了operator(),它看起来像一个函数,但它是对 functor operator()的调用。这个操作符看起来像是在接受两个参数,如果 "x "大于 "y",则返回真或假给主方法。主方法定义了三个整数类型的变量,其整数值都被初始化为 "x "和 "y"。
另一个整数变量 "res "被声明为从functor中获取返回值。这个 "f(x,y) "似乎是一个函数调用,但它不是。这里用这种语法来调用一个放克的运算器()。如果变量 "x "大于 "y",它将返回1;否则,变量 "res "为0。这里使用了 "cout "语句来打印出结果值。

用 "Ctrl+S "保存代码后,用 "Ctrl+X "的快捷键离开它。现在,是编译c++代码的时候了。为了编译,确保你在Ubuntu 20.04系统上已经配置了g++编译器。所以,这里利用g++命令来编译 "functor.cc "文件。在这之后,"./a.out "被用来执行该文件。执行结果显示 "1"。这意味着变量 "x "比变量 "y "大。

让我们对我们的C++代码做一个更新。用shell上的nano编辑器打开同一个文件,如下图。你要做的唯一改变是将运算符()中的 "大于 "符号改为 "小于 "符号。其余的代码将保持不变。保存更新后的文件,并连续使用 "Ctrl+S "和 "Ctrl+X "离开它。

保存文件后,必须再次编译该代码。因此,再次使用g++编译器命令来进行编译。编译后,执行这个新更新的文件会返回0,因为变量 "x "不低于变量 "y",即13和6。

假设你想把两个整数相加而不使用某些函数。函数在这里为你提供帮助。它可以使用其中的加法运算符来完成。因此,在编辑器中打开C++文件 "functor.cc",即GNU Nano,再次更新其代码。将利用 "nano "命令来实现这一目的。打开这个文件后,让我们在以前做过的相同位置进行更新。我们将变量之间的 "小于 "符号替换为 "加 "符号。这是为了把两个变量的值加起来,并把这个值返回给对象调用。
函数调用将把这个值保存到另一个变量 "res "中,并在 "cout "子句的帮助下将其显示在shell上。同样的代码将被应用于做带有"-"号的减法。再次按 "Ctrl+S "保存你的代码。现在,使用 "Ctrl+X "返回到shell终端。

退出C++文件后,使用g++编译器再次编译其中新更新的代码,同时使用C++文件的名称,即functor.cc,如下图。编译完成后,在"./a.out "指令的帮助下运行更新的代码文件,如下图所示。输出结果显示,由于两个整数类型的数值相加,即13和6,所以数值为19。

例子2:
让我们举一个新的例子来说明漏斗对象的功能。在 "触摸 "指令的帮助下,创建一个新的C++文件或使用旧的文件,即functor.cc。使用 "nano "指令在GNU Nano编辑器中打开创建的文件,如本文开头所附图片所示。现在,在文件的最上方添加一个输入-输出流的头文件。必须使用关键字 "using "来声明标准命名空间。类 "Func "已经被声明,其中包含公共类型的对象。第一个是名为 "Func "的构造函数,它的参数是一个整数类型的参数。在"_a "和"(a) "的帮助下,这个整数类型的参数值将被保存到变量 "a "中。这个构造函数并没有做更多的事情。
在这之后,这里使用了一个漏斗的操作符来减去两个整数类型的值。类 "Func "中定义了私有数据类型变量"_a"。这里是主方法。首先,我们创建了一个 "Func "类的对象 "f1",并给它传递了一个整数类型的值,即 "13"。现在,在创建这个对象 "f1 "之后,"Func "类的构造函数 "Func "将被执行,并将值13保存到一个整数变量"_a "中。在这之后,这里使用了 "cout "语句来显示一个类的对象。没有什么可混淆的。
当对象被调用时,意味着这里正在调用functor operator(),并分配一个值 "6"。通过这一点,漏斗使用operator()来计算两个变量的减法,并将其返回给主程序。让我们保存代码文件,之后退出。在这里使用 "Ctrl+S "和 "Ctrl+X"。

现在C++ functor.cc文件的代码已被保存,在执行前先编译它。使用同样的 "g++"编译器命令,使其没有错误。编译获得成功,我们已经进入执行阶段。在用"./a.out "命令执行该文件时,我们得到7的减法结果。

总结
以上就是在Ubuntu 20.04系统上使用C++中的Functors的全部内容。我们使用了operator()来调用functor。我们还看到了如何在C++中利用类和它的对象来使用Functor。我们相信所有的例子都很容易做到,并且可以帮助你在Ubuntu 20.04 Linux系统中轻松理解Functors的概念。