C++学习笔记——对仿函数的理解

news2024/11/17 16:32:27

文章目录

  • 思维导图
    • 仿函数出现的逻辑
    • 仿函数使用上的巧妙
  • 仿函数的本质
  • 仿函数的优势
  • 仿函数语法的巧妙

思维导图

在这里插入图片描述

仿函数出现的逻辑

我们在学习stack时会遇到一些新的问题,这些问题需要我们使用非类型模板参数去解决,即我们需要在设计类时需要有一个途径去快捷的修改类内部的逻辑,而此时会出现我们用原有的方法无法修改类内部的逻辑;
因此,这里我们需要涉及到仿函数(类型函数)的概念;

仿函数使用上的巧妙

由模板的出现,结合封装的思想发展而生的一个新的逻辑构建途径,将一个类在实例化后的对象名作为一个函数名看待;在对象名后面使用operator()并加入参数,这种方法可以允许我们对参数数量确定的情况下通过选择传递不同的类型,来实现对参数彼此之间的逻辑关系的控制修改;

仿函数的本质

仿函数其本质还是回调——凭借一个对象去使用它的函数;不过不同点在于,我们这里传输的是函数的类型,另外加一个模板参数类型,将实例化一个对象的步骤交给了仿函数去做;

仿函数的优势

这种方法的优势在于我们可以直接修改传参时传入的类型和模板参数就修改了整个类里面某一逻辑,且这种逻辑是可以被我们以自定义的方法去定义;

仿函数语法的巧妙

从仿函数的与法规则我们也可以从中看出C++的一些语法和编译过程的联系。

追根溯源,是编译过程决定哪些语法可以,哪些不可以。

观察传参,我们可以看数量、类型、种类等信息哪些被传过去了,通过这些关键信息的传递,我们可以去猜测编译过程发生了什么,接收参数的类进行自身内部的所有行为都是基于它接收到的信息,当我们在设计传参时发现错错误,一般都是类里面需要某种信息,而我们没有传递给它;
例如:
非类型模板参数必须要传递常量,以便其编译;

在实践中,我们可以发现必须要常量才能使仿函数实例化,因为实例化一个对象我们需要类的类型和模板参数类型,我们在传递类型时没有把模板参数类型传过去,这意味着当编译开始时,编译没有办法完成自己的任务,编译的任务是提前把需要使用的逻辑通路准备号好,而当我们没有传递模板参数类型时,一些类型本身就需要模板参数类型才完整,不给就无法去确定类型的一些变量的数据类型,所以就无法编译这些变量、进而无法编译一些函数,最后编译的内容由有一堆未知的东西;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1656012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】——函数、存储过程、触发器

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

社交新时代:Facebook如何塑造我们的互动方式

在当今社交媒体充斥着人们日常生活的情况下,Facebook作为影响力最大的社交平台之一,已经深深地影响了我们的互动方式和社交行为。从初期的大学校园社交网络发展到如今的全球社交巨头,Facebook已经成为许多人日常生活中不可或缺的组成部分。本…

【软考高项】三十八、风险管理7个过程

一、规划风险管理 1、定义、作用 定义:定义如何实施项目风险管理活动的过程作用:确保风险管理的水平、方法和可见度与项目风险程度相匹配,与对组织和其他干系人的重要程度相匹配 2、输入 项目管理计划 项目章程 项目文件 干系人登记册…

初识C++ · 内存管理

目录 1 C/C的内存分布 2 C语言的内存管理 3 C的内存管理 4 operator new 和 operator delete 5 定位new 1 C/C的内存分布 语言不同,内存分布是相同的,对于局部变量都是放在栈上,全局变量都是放在静态区(数据段)&…

O2OA(翱途)支持高斯_openGauss,瀚高_HighGo,磐维_panweidb等各种国产postgres分支数据库接入

O2OA(翱途)作为一款企业级应用平台,其支持多种数据库系统是其灵活性和可扩展性的重要体现。从MySQL、Oracle到国产的达梦、神州等数据库,再到对PostgreSQL的原生支持,O2OA展现了其对不同数据库环境的良好适应性。特别地…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序,之所以开发效率高,性能高,用户体验好,是因为页面按需更新。 而如果要按需更新,首先需要明确:访问路径和组件的对应关系。该关系通过路由来…

2024最新同城吃喝玩乐小程序源码+同城分类信息小程序搭建+开源无需授权+详细图文安装部署教程

在繁忙的都市生活中,生活节奏飞快,人们希望能够快速、便捷地获取各类生活信息,满足日常的吃喝玩乐需求。同城吃喝玩乐同城分类信息小程序,非常受欢迎,提供一站式便捷生活新体验。 分享一款2024最新同城吃喝玩乐小程序…

1707jsp电影视频网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 校园商城派送系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数…

基于springboot+mybatis+vue的项目实战之前端

步骤: 1、项目准备:新建项目,并删除自带demo程序,修改application.properties. 2、使用Apifox准备好json数据的mock地址 3、编写基于vue的静态页面 4、运行 整个的目录结构如下: 0、项目准备 新建项目&#xff0…

【可实战】被测需求理解(需求文档是啥样的、从哪些角度进行需求评审、需求分析需要分析出哪些内容、如何提高需求分析能力)

产品人员会产出一个需求文档,然后组织一个需求的宣讲。测试人员的任务就是在需求宣讲当中,分析需求有没有存在一些问题,然后在需求宣讲结束之后通过分析需求文档,分析里面的测试点并预估一个排期。 一、需求文档是什么样的&#x…

西红柿叶病害检测(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

1.基于最新的YOLOv8训练的西红柿病害检测模型,和基于PyQt5制作的可视西红柿病害系统,包含登陆页面、注册页面和检测页面,该系统可自动检Bacterial Spot, Early_Blight, Healthy, Late_blight, Leaf Mold, Target_Spot, black spot&#xff0c…

同步时序电路的分析方法

同步时序电路的分析方法 基本步骤 Step1:写方程式 时钟方程 :各个触发器时钟信号的逻辑表达式,同步时序电路可省去不写 输出方程:时序电路的输出逻辑表达式,通常为现态和输入变量的函数 驱动方程 :各触发器…

【Java】初识网络编程

文章目录 前言✍一、互联网的发展1.独立模式2.网络的出现局域网LAN广域网WAN ✍二、网络编程概述✍三、网络编程中的术语介绍IP地址端口号协议OSI七层模型TCP\IP四层模型 ✍四、协议的层级之间是如何配合工作的 前言 在本文中,会对网络编程的一些术语进行解释&#…

【npm】解决npm包突然消失MODULE_NOT_FOUND

今天折腾新特性时需要升级nodejs,安装新版后npm离奇消失了。C:\Users\**用户名\AppData\Roaming\npm\node_modules下只有cnpm,没有npm的目录。重装nodejs也不好使。 机智如我,试了下cnpm -v是正常的,而且能看到nodejs,…

start.spring.io不支持java8,idea使用阿里云又报错

做项目的时候,我们可以发现,访问https://start.spring.io/ 创建脚手架项目的时候,最低是java 17了 但是对于很多项目来说,还是在用java8,这该怎么办呢? 值得庆幸的是,阿里云也同样有相同功能的…

掌握MySQL常用的命令

前言 MySQL是一个流行的开源关系型数据库管理系统,广泛应用于各种应用场景。熟练掌握MySQL的常用命令,对于数据库管理员和开发人员来说至关重要。本文将介绍MySQL数据库的一些基础术语、SQL语言分类,以及DDL、DML、DQL和DCL等操作&#xff0…

浅了解UE5

1.什么是UE5 UE5(Unreal Engine 5)是一款由Epic Games开的游戏引擎,它是UE4的后续版本。UE5于2021年5月首次发布,并在2022年正式发布。UE5引入了许多令人兴奋的新功能和改进,以下是一些主要的介绍: 1. 光线…

编程入门(六)【Linux系统基础操作四】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀if else条件控制基本的if语句带else的if语句嵌…

通俗易懂讲解 nginx-rtmp-module 是干嘛的?

文章目录 概述安装 nginx 和 nginx-rtmp-module配置 Nginx启动 Nginx使用示例推流拉流转码鉴权与安全自动录制 概述 nginx-rtmp-module 是一个用于 Nginx 的第三方模块,它扩展了 Nginx 服务器的功能,使其能够处理实时流媒体数据,特别是支持 …