C++函数对象
任何定义了函数调用操作符的对象都是函数对象。C++ 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。
函数包装器
std::function 提供存储任意类型函数对象的支持。
function (C++11) | 包装具有指定函数调用签名的任意类型的可调用对象 (类模板) |
bad_function_call (C++11) | 调用空的 std::function 时抛出的异常 (类) |
mem_fn (C++11) | 从成员指针创建出函数对象 (函数模板) |
函数调用
std::invoke 能以给定参数调用任何可调用 (Callable) 对象。
invoke (C++17) | 以给定实参调用任意可调用 (Callable) 对象 (函数模板) |
恒等
std::identity 是恒等函数对象:它返回其不修改的参数。
identity (C++20) | 返回其未修改的参数的函数对象 (类) |
部分函数应用
std::bind_front 与 std::bind 提供部分函数应用的支持,即绑定参数到函数以创建新函数。
bind_front (C++20) | 按顺序绑定一定数量的参数到函数对象 (函数模板) |
bind (C++11) | 绑定一或多个实参到函数对象 (函数模板) |
is_bind_expression (C++11) | 指示对象为 std::bind 表达式,或能被用作这种表达式(类模板) |
is_placeholder (C++11) | 表明一个对象是标准占位符,或者可以用作标准占位符 (类模板) |
定义于命名空间 | |
_1, _2, _3, _4, ... (C++11) | 用作 std::bind 表达式中的未绑定实参的占位符(常量) |
取反器
std::not_fn 创建对传递给它的可调用对象的结果取反的函数对象。
not_fn (C++17) | 创建返回其保有的函数对象的结果之补的函数对象 (函数模板) |
搜索器
提供实现数种字符串搜索算法的搜索器。它们能直接使用或用于 std::search 。
default_searcher (C++17) | 标准 C++ 库搜索算法实现 (类模板) |
boyer_moore_searcher (C++17) | Boyer-Moore 搜索算法实现 (类模板) |
boyer_moore_horspool_searcher (C++17) | Boyer-Moore-Horspool 搜索算法实现 (类模板) |
引用包装器
引用包装器允许存储引用到可复制的函数对象中:
reference_wrapper (C++11) | 可复制构造 (CopyConstructible) 且可复制赋值 (CopyAssignable) 的引用包装器 (类模板) |
refcref (C++11)(C++11) | 创建具有从其实参推导的类型的 std::reference_wrapper (函数模板) |
unwrap_referenceunwrap_ref_decay (C++20)(C++20) | 获取包装于 std::reference_wrapper 的引用类型 (类模板) |
运算符函数对象
C++ 针对常用的算术和逻辑运算定义了很多函数对象:
算术运算
plus | 实现 x + y 的函数对象 (类模板) |
minus | 实现 x - y 的函数对象 (类模板) |
multiplies | 实现 x * y 的函数对象 (类模板) |
divides | 实现 x / y 的函数对象 (类模板) |
modulus | 实现 x % y 的函数对象 (类模板) |
negate | 实现 -x 的函数对象 (类模板) |
比较
equal_to | 实现 x == y 的函数对象 (类模板) |
not_equal_to | 实现 x != y 的函数对象 (类模板) |
greater | 实现 x > y 的函数对象 (类模板) |
less | 实现 x < y 的函数对象 (类模板) |
greater_equal | 实现 x >= y 的函数对象 (类模板) |
less_equal | 实现 x <= y 的函数对象 (类模板) |
逻辑运算
logical_and | 实现 x && y 的函数对象 (类模板) |
logical_or | 实现 x || y 的函数对象 (类模板) |
logical_not | 实现 !x 的函数对象 (类模板) |
位运算
bit_and | 实现 x & y 的函数对象 (类模板) |
bit_or | 实现 x | y 的函数对象 (类模板) |
bit_xor | 实现 x ^ y 的函数对象 (类模板) |
bit_not (C++14) | 实现 ~x 的函数对象 (类模板) |
有制约的比较函数对象 (C++20)
C++20 定义一组有制约的比较函数对象。相等运算符 (ranges::equal_to
与 ranges::not_equal_to
) 要求参数类型实现 equality_comparable_with 。关系运算符( ranges::less
、 ranges::greater
、 ranges::less_equal
及 ranges::greater_equal
)要求参数类型实现 totally_ordered_with 。
ranges::equal_to (C++20) | 实现 x == y 的函数对象 (类) |
ranges::not_equal_to (C++20) | 实现 x != y 的函数对象 (类) |
ranges::less (C++20) | 实现 x < y 的函数对象 (类) |
ranges::greater (C++20) | 实现 x > y 的函数对象 (类) |
ranges::less_equal (C++20) | 实现 x <= y 的函数对象 (类) |
ranges::greater_equal (C++20) | 实现 x >= y 的函数对象 (类) |
旧式绑定器与适配器
早期提供功能支持的几个工具在 C++11 中弃用,并于 C++17 中移除(旧否定器于 C++17 中弃用并于 C++20 中移除):
基类
unary_function (C++11 中弃用)(C++17 中移除) | 与适配器兼容的一元函数基类 (类模板) |
binary_function (C++11 中弃用)(C++17 中移除) | 与适配器兼容的二元函数基类 (类模板) |
绑定器
binder1stbinder2nd (C++11 中弃用)(C++17 中移除) | 持有一个二元函数及其实参之一的函数对象 (类模板) |
bind1stbind2nd (C++11 中弃用)(C++17 中移除) | 将一个实参绑定到二元函数 (函数模板) |
函数适配器
pointer_to_unary_function (C++11 中弃用)(C++17 中移除) | 适配器兼容的包装,用于包装一元函数的指针 (类模板) |
pointer_to_binary_function (C++11 中弃用)(C++17 中移除) | 适配器兼容的包装,用于包装二元函数的指针 (类模板) |
ptr_fun (C++11 中弃用)(C++17 中移除) | 从函数指针创建与适配器兼容的函数对象包装器 (函数模板) |
mem_fun_tmem_fun1_tconst_mem_fun_tconst_mem_fun1_t (C++11 中弃用)(C++17 中移除) | 指向零元或一元成员函数指针的包装器,可以一个对象指针调用 (类模板) |
mem_fun (C++11 中弃用)(C++17 中移除) | 从成员函数指针创建包装器,可以一个对象指针调用 (函数模板) |
mem_fun_ref_tmem_fun1_ref_tconst_mem_fun_ref_tconst_mem_fun1_ref_t (C++11 中弃用)(C++17 中移除) | 指向零元或一元成员函数指针的包装器,可以一个对象引用调用 (类模板) |
mem_fun_ref (C++11 中弃用)(C++17 中移除) | 从成员函数指针创建包装器,能以一个对象引用调用 (函数模板) |
unary_negate (C++17 中弃用)(C++20 中移除) | 包装器函数对象,返回所持有的一元谓词的补 (类模板) |
binary_negate (C++17 中弃用)(C++20 中移除) | 包装器函数对象,返回所持有的二元谓词的补 (类模板) |
not1 (C++17 中弃用)(C++20 中移除) | 构造定制的 std::unary_negate 对象 (函数模板) |
not2 (C++17 中弃用)(C++20 中移除) | 构造定制的 std::binary_negate 对象 (函数模板) |
相关文章:
C++函数对象
任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。 函数包装器 std::function 提供存储任意类型函数对象的支持。 function (C11) 包装具有指定函数调用签名的任意类型的可调用对象 (类模板) bad_funct…...

插件化简单介绍
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、常见的插件化方案…...

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目
一.Beego介绍 Beego是一个开源的基于Golang的MVC框架,主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…...
Tomcat 静态资源访问与项目根路径设置(AI问答)
一个静态文件,放在Tomcat中,希望能够通过网络访问,应该放在哪里? 在Apache Tomcat中,如果想要部署静态文件(例如HTML、CSS、JavaScript、图片等)并能通过网络访问,通常需要将这些文…...

Docker实战09|使用AUFS包装busybox
前几篇文章中,重点讲解了如何实现构建容器,需要回顾的小伙伴可以看以下文章: 《Docker实战06|深入剖析Docker Run命令》《Docker实战07|Docker增加容器资源限制》《Docker实战08|Docker管道及环境变量识别…...
什么是uni.request()?如何使用它?
uni.request()是uni-app提供的一个用于发起网络请求的API。 使用uni.request()的步骤如下: 在需要发起网络请求的页面中引入uni.request()方法。 调用uni.request()方法,并传入相应的参数,包括请求地址、请求方法、请求头部和请求数据等。 …...

用React给XXL-JOB开发一个新皮肤(一):环境搭建和项目初始化
目录 一. 简述二. Fork 项目三. 搭建开发环境四. 初始化皮肤项目五. 添加相关依赖六. 预览 一. 简述 大名鼎鼎的 xxl-job 任务调度中心我们应该都使用过,项目地址:xxl-job。它是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单…...

华为常用的命令——display,记得点赞收藏!
华为设备提供了多条display命令用于查看硬件部件、接口及软件的状态信息。通常这些状态信息可以为用户故障处理提供定位思路。 常用的故障信息搜集的命令如下: 路由器常用维护命令表 交换机常用的故障信息搜集 关注 工 仲 好:IT运维大本营,获…...

Costco攻入山姆大本营
01 Costco深圳店开业火爆 “我今天不去Costco,早上还没开业,路上就已经堵车了,看来今天人很多,过几天再去”,原本计划在Costco开业当天去逛逛的张芸(化名)无奈只能放弃。 家住在Costco深圳店旁…...
什么是常量?如何区分常量和变量?
一、问题 什么是常量,什么是变量?怎样区分⼆者? 二、解答 1. 常量与变量 (1)常量即其值在程序运⾏的过程中是不可以改变的,如123,-4567 为数值常量; (2)变量…...
uniapp返回上一页并刷新数据
在uniapp中,返回页面时onLoad是不会触发的 如果只需要在特定情况下返回上一页才需要刷新数据 可以使用$emit和$no去解决 例如:注册完成后返回到首页并隐藏注册按钮,register.vue和index.vue register.vue <template><view clic…...

LeetCode 0083.删除排序链表中的重复元素:模拟
【LetMeFly】83.删除排序链表中的重复元素:模拟 力扣题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的…...

Javaweb之SpringBootWeb案例新增部门的详细解析
2.3 删除部门 查询部门的功能我们搞定了,下面我们开始完成删除部门的功能开发。 2.3.1 需求 点击部门列表后面操作栏的 "删除" 按钮,就可以删除该部门信息。 此时,前端只需要给服务端传递一个ID参数就可以了。 我们从接口文档中也…...

基于微信小程序的音乐平台 开源项目
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台,包含了音乐…...

uniapp 微信小程序跳转外部链接
一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…...

【STM32】FLASH闪存
1 FLASH闪存简介 本节所指STM32内部闪存,即下载程序的时候,程序存储的地方。(非易失性) STM32F1系列的FLASH包含程序存储器、系统存储器(bootloader,不允许修改)和选项字节三个部分࿰…...

滴水内存地址堆栈
两个十六进制数 刚好是一个字节刚好 DC这的一个字节数据为E4 一个内存地址 后面表示四个字节的数据 所以有八个十六进制的数 BASE是高地址 所以放入一个四字节后就 -4...
Laravel中的lockForUpdate悲观锁
lockForUpdate 是悲观锁,测试就不写了 注意的事项 lockForUpdate 必须在事务中lockForUpdate 被阻塞的查询必须是同样添加了lockForUpdate的语句查询语句走索引,则使用行锁,否则使用表锁 现在举例说明第一项和第二项 开启事务并添加锁 pub…...

BikeDNA(八)外在分析:OSM 与参考数据的比较2
BikeDNA(八)外在分析:OSM 与参考数据的比较2 1.数据完整性 见链接 2.网络拓扑结构 见链接 3.网络组件 本节仔细研究两个数据集的网络组件特征。 断开连接的组件不共享任何元素(节点/边)。 换句话说,…...

28 星际旋转
效果演示 实现了一个太阳系动画,其中包括了地球、火星、金星、土星、水星、天王星、海王星以及火卫二号等行星的动画效果。太阳系的行星都被放在一个固定的容器中,并使用CSS动画来实现旋转和移动的效果。当太阳系的行星绕着太阳运行时,它们会…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...