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

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)

表明一个对象是标准占位符,或者可以用作标准占位符
(类模板)

定义于命名空间 std::placeholders

_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_toranges::not_equal_to) 要求参数类型实现 equality_comparable_with 。关系运算符( ranges::lessranges::greaterranges::less_equalranges::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 支持创建、操作新的函数对象&#xff0c;同时也提供了许多内置的函数对象。 函数包装器 std::function 提供存储任意类型函数对象的支持。 function (C11) 包装具有指定函数调用签名的任意类型的可调用对象 (类模板) bad_funct…...

插件化简单介绍

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

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…...

Tomcat 静态资源访问与项目根路径设置(AI问答)

一个静态文件&#xff0c;放在Tomcat中&#xff0c;希望能够通过网络访问&#xff0c;应该放在哪里&#xff1f; 在Apache Tomcat中&#xff0c;如果想要部署静态文件&#xff08;例如HTML、CSS、JavaScript、图片等&#xff09;并能通过网络访问&#xff0c;通常需要将这些文…...

Docker实战09|使用AUFS包装busybox

前几篇文章中&#xff0c;重点讲解了如何实现构建容器&#xff0c;需要回顾的小伙伴可以看以下文章&#xff1a; 《Docker实战06&#xff5c;深入剖析Docker Run命令》《Docker实战07&#xff5c;Docker增加容器资源限制》《Docker实战08&#xff5c;Docker管道及环境变量识别…...

什么是uni.request()?如何使用它?

uni.request()是uni-app提供的一个用于发起网络请求的API。 使用uni.request()的步骤如下&#xff1a; 在需要发起网络请求的页面中引入uni.request()方法。 调用uni.request()方法&#xff0c;并传入相应的参数&#xff0c;包括请求地址、请求方法、请求头部和请求数据等。 …...

用React给XXL-JOB开发一个新皮肤(一):环境搭建和项目初始化

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

华为常用的命令——display,记得点赞收藏!

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

Costco攻入山姆大本营

01 Costco深圳店开业火爆 “我今天不去Costco&#xff0c;早上还没开业&#xff0c;路上就已经堵车了&#xff0c;看来今天人很多&#xff0c;过几天再去”&#xff0c;原本计划在Costco开业当天去逛逛的张芸&#xff08;化名&#xff09;无奈只能放弃。 家住在Costco深圳店旁…...

什么是常量?如何区分常量和变量?

一、问题 什么是常量&#xff0c;什么是变量&#xff1f;怎样区分⼆者&#xff1f; 二、解答 1. 常量与变量 &#xff08;1&#xff09;常量即其值在程序运⾏的过程中是不可以改变的&#xff0c;如123&#xff0c;-4567 为数值常量&#xff1b; &#xff08;2&#xff09;变量…...

uniapp返回上一页并刷新数据

在uniapp中&#xff0c;返回页面时onLoad是不会触发的 如果只需要在特定情况下返回上一页才需要刷新数据 可以使用$emit和$no去解决 例如&#xff1a;注册完成后返回到首页并隐藏注册按钮&#xff0c;register.vue和index.vue register.vue <template><view clic…...

LeetCode 0083.删除排序链表中的重复元素:模拟

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

Javaweb之SpringBootWeb案例新增部门的详细解析

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

基于微信小程序的音乐平台 开源项目

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

uniapp 微信小程序跳转外部链接

一、背景&#xff1a; 开发小程序时&#xff0c;跳转到内部路径通常会使用&#xff1a;uni.navigateTo&#xff0c;uni.redirectTo&#xff0c;uni.reLaunch&#xff0c;uni.switchTab等方法&#xff0c;可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…...

【STM32】FLASH闪存

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

滴水内存地址堆栈

两个十六进制数 刚好是一个字节刚好 DC这的一个字节数据为E4 一个内存地址 后面表示四个字节的数据 所以有八个十六进制的数 BASE是高地址 所以放入一个四字节后就 -4...

Laravel中的lockForUpdate悲观锁

lockForUpdate 是悲观锁&#xff0c;测试就不写了 注意的事项 lockForUpdate 必须在事务中lockForUpdate 被阻塞的查询必须是同样添加了lockForUpdate的语句查询语句走索引&#xff0c;则使用行锁&#xff0c;否则使用表锁 现在举例说明第一项和第二项 开启事务并添加锁 pub…...

BikeDNA(八)外在分析:OSM 与参考数据的比较2

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

28 星际旋转

效果演示 实现了一个太阳系动画&#xff0c;其中包括了地球、火星、金星、土星、水星、天王星、海王星以及火卫二号等行星的动画效果。太阳系的行星都被放在一个固定的容器中&#xff0c;并使用CSS动画来实现旋转和移动的效果。当太阳系的行星绕着太阳运行时&#xff0c;它们会…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称&#xff1a;Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号&#xff1a;CVE-2023-25194 CVSS评分&#xff1a;8.8 影响版本&#xff1a;Apache Kafka 2.3.0 - 3.3.2 修复版本&#xff1a;≥ 3.4.0 漏洞类型&#xff1a;反序列化导致的远程代…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...