首页 > 编程语言 >C++中的仿函数Functor

C++中的仿函数Functor

时间:2024-11-14 15:56:58浏览次数:1  
标签:函数 int add Functor 对象 TestAdd C++ operator

在C++中,有仿函数Functor的概念,首先要明白,它叫做仿函数,就说明它本身肯定不是一个函数 => 事实上,它是一个类的对象,但是可以像函数一样来进行调用

怎么来理解这句话呢 “仿函数是一个类的对象,但是它可以像函数一样来进行调用”? 

是这样的 => 本质是在这个类里面实现一个operator(), 实现这个operator之后呢,这个类就有了类似函数的行为, 此时实例化这个类的一个对象时,我们可以像调用函数一样来调用类的这个实例化对象。  =>  这个类就叫做 仿函数类

我们来看一个很直观的例子:

class TestAdd
{
    public:
        int operator()(int x, int y) const  
        {
                return x + y;
         }
};

int main()
{
      TestAdd add;  // 创建类TestAdd的一个实例化对象 add

      int addResult = add(1,2); 

      std::count <<  "Result: " << addResult << std::end1;

     return 0;
}

 

class TestAdd
{
    public:
        int operator()(int x, int y) const  // 类 TestAdd中实现了operator, 它就是一个方法函数类,operator操作符可以接受任意数量和类型的参数,还可以有返回值
        {
                return x + y;
         }
};

int main()
{
      TestAdd add;  // 创建类TestAdd的一个实例化对象 add

      int addResult = add(1,2); //像调用函数一样去调用这个仿函数类的对象add

      std::count <<  "Result: " << addResult << std::end1;

     return 0;
}

 

标签:函数,int,add,Functor,对象,TestAdd,C++,operator
From: https://www.cnblogs.com/wphl-27/p/18546215

相关文章

  • C++11新特性lambda
    文章目录前言lambda进阶用法总结前言本文介绍C++11新特性中的lamdba在C++11中支持了lambda表达式,如果你想生成一个简短、方便调用、函数内部清晰的轻量级函数,lambda是一个不错的选择。它允许我们在函数中生成函数,也可以向对待函数一样对待lambda。lambda首先看......
  • C语言:函数递归
    #include<stdio.h>intmain(){ printf("haha\n"); main(); return0;}先来看这段代码,这是最简易的一段递归的代码。当我们打印完haha后会main函数调用自己,这样就会使屏幕一直打印haha,但是会停止,这是为什么呢?因为当我们为main函数在栈区开出的内存被不断使用,最后导致栈溢......
  • c++和c的不同及c++扩展内容
    头文件不同c++采用iostream库,并且作用与std领域中;标准格式:Usingnamespacestd#include<iostream>Intmain(){xxxxxSystem("pause");Return0;}提出了四个作用区域全局区代码区栈区堆取全局区:用来存放所有的全局变量,或宏定义代码,静态变量和常量;代码区:用来......
  • STL标准模板库c++
    STL:广义上分为:容器,算法,迭代器容器与算法间通过迭代器进行无缝连接。STL六大组件,分别是容器,算法,迭代器,仿函数,适配器,空间配置器。vector容器可以理解为数组;为单端数组,区别在于数组为静态空间,而vector可以动态扩展动态扩展:不是在原空间下,找到更......
  • 单向链表题库2(c++)
    目录前言[1.力扣——LCR123.图书整理I](https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/description/)[2.力扣——LCR024.反转链表](https://leetcode.cn/problems/UHnkqh/submissions/580256040/)[3.力扣LCR141.训练计划III](https://le......
  • 【Pytorch】神经网络介绍|激活函数|使用pytorch搭建方法
    神经网络神经网络介绍概念神经网络人工神经网络ANN也称神经网络NN是一种模仿生物神经网络结构和功能的计算模型人脑可以看作是一个生物神经网络,由众多神经元连接而成,神经网络可以看作是模拟生物神经元的过程输入层inputLayer:输入x的那一层输出层output......
  • 高级语言调用C接口(二)回调函数(1)
    前言先说一下上一篇文章给出了各高级语言类型和C类型的对应关系,只包含基本类型,不包含结构体等复杂结构,高级语言只有常见的JAVA(Android通用)、C#、Python、Arkts(鸿蒙系)。其它语言如delphi、PB之类的古老语言目前使用的人非常稀少,默认不写了;还有js调用需要编译位wasm,但限制非......
  • c++ 标准 智能指针 与 qt 智能指针 对比
    C++标准库提供了std::unique_ptr和std::shared_ptr等智能指针,而Qt则提供了QScopedPointer、QSharedPointer和QWeakPointer等自己的智能指针。两者在设计上有一些相似之处,但也存在一些关键的差异。下面是C++标准智能指针和Qt智能指针的详细对比:1.std::uniq......
  • C++生成随机数
    目录一、传统方式:std::rand 和 std::srand使用方法:优缺点:二、现代方式: 库(推荐)1. 随机整数2. 随机浮点数3. 布尔值4. 字符5. 正态分布(高斯分布)6. 离散分布的随机数7. 随机字符串8. UUID(通用唯一标识符)三、std::shuffle:用于打乱序列四、总结:选择合适的......
  • Day 14 匿名函数 内置函数 面向对象编程
    目录0上节课复习0.1迭代器0.1.1可迭代对象0.1.2迭代器对象0.1.3for循环原理0.2三元表达式0.3列表推导式0.4字典生成器0.5生成器0.5.1生成器表达式0.6递归0.7二分法1匿名函数1.1有名函数1.2匿名函数2内置函数2.1掌握2.2了解3面向过程编程0上节课复习0.1迭代......