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动画来实现旋转和移动的效果。当太阳系的行星绕着太阳运行时,它们会…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
