当前位置: 首页 > news >正文

C++学习笔记——仿函数

文章目录

  • 仿函数——思维导图
  • 仿函数是什么
  • 仿函数的优势
  • 理解仿函数
  • 仿函数的原理
  • 举例

仿函数——思维导图

在这里插入图片描述

仿函数是什么

  1. 使用对象名调用operator()函数看起来像是在使用函数一样,因此便有了仿函数的称呼;
  2. 仿函数存在的意义是:让我们方便的调用类的成员函数;
  3. 它在功能上替代了C语言的函数指针
  4. 目前我们学的写的仿函数的存在意义就是为了:使用类的重载operator()
  5. 什么情况下我们会使用仿函数:我们在需要实现一个我们的独特意图时,我们会写仿函数定制一个功能;

仿函数的优势

  1. 使用成本低
    它允许我们在传参的时候顺手设定逻辑方向,即让我们可以通过改变输入类型来间接改变目标函数内部的一些逻辑方向;

  2. 信息密度低
    仿函数体现了封装思维,把大量的修改逻辑的冗杂操作封装成一次修改类型;

  3. 低耦合
    将函数内的一些过程摘出来用一个函数实现它,将函数的部分功能模块化

理解仿函数

仿函数调用类的成员函数和我们之前学的回调操作类似;

  1. 回调——以对象名调函数:传对象,凭借这个对象调用成员函数;
  2. 仿函数——以类型名调函数:传类型、传模板参数的类型,凭借这个类型的成员函数

仿函数的底层逻辑依然是靠对象(通过传来的类型和模板参数生成一个对象)使用成员函数,仿函数的优点在于省去了我们生成对象的操作,使我们的操作更加灵活。

我们可以控制类型的比较规则
仿函数不仅可以对我们传过去的参数间的逻辑运算做出改变,还可以对目标函数识别参数这一过程也做出改变;
例如:我们可以决定它的参数到底是直接参与逻辑运算还是解引用后再参与(可能传来一个地址);

仿函数的原理

当我们使用仿函数时我们会传递一些信息,我们传递的是一个类型,该类型作为模板参数给到目标函数时,它的类型信息被抽取给了目标函数,目标函数根据这个类型信息进而实例化一个对象,后续使用该对象的对象名调用operator()等函数。

举例

A<int> a;  

为什么实例化对象不能我们不止写了对象名A还要加一个类型int进去,因为我们传递的对象本身并没有把它的模板参数的类型传递过去,而目标函数本身是个类需要一个类型去定义它的模板参数类型,只有这样才能在后面实例化出一个确定的对象,所以我们要手动补充;

逻辑上简而言之,一个类型传给另一个类型,附加个模板参数类型;
实践上简而言之,实例化需要类型名、类型的模板参数类型;

http://www.lryc.cn/news/344451.html

相关文章:

  • python 中如何匹配字符串
  • Windows 系统运维常用命令
  • Springboot监听ConfigMap配置文件自动更新配置
  • API安全机制
  • 接口性能测试 —— Jmeter并发与持续性压测!
  • Windows+Linux的虚拟串口工具
  • Spring-AOP
  • 算法程序设计-快速排序
  • Jmeter用jdbc实现对数据库的操作
  • Mac 上安装多版本的 JDK 且实现 自由切换
  • springboot如何发送邮件,java如何发送邮件随机码作为验证
  • 使用QLoRA在自定义数据集上finetuning 大模型 LLAMA3 的数据比对分析
  • 编译和链接(超详细)
  • Rust Turbofish 的由来
  • 2.外卖点餐系统(Java项目 springboot)
  • Universal Thresholdizer:将多种密码学原语门限化
  • 【UE5学习笔记】编辑及运行界面:关闭眼部识别(自动曝光)
  • 未来科技的前沿:深入探讨人工智能的进展、机器学习技术和未来趋势
  • 3-qt综合实例-贪吃蛇的游戏程序
  • QGraphicsView实现简易地图12『平移与偏移』
  • 深入探索 Vue 中的 createVNode 与 resolveComponent
  • 【记录42】centos 7.6安装nginx教程详细教程
  • C语言程序设计(不熟悉的点)
  • DAO是什么?有什么用途?
  • Socket学习记录
  • 黑马 - websocket搭建在线聊天室
  • 【每日力扣】543. 二叉树的直径与101. 对称二叉树
  • 【linux】——日志分析
  • 【intro】GraphSAGE
  • 管理能力学习笔记九:授权的常见误区和如何有效授权