当前位置: 首页 > 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 对象
(函数模板)
http://www.lryc.cn/news/280116.html

相关文章:

  • 插件化简单介绍
  • [Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目
  • Tomcat 静态资源访问与项目根路径设置(AI问答)
  • Docker实战09|使用AUFS包装busybox
  • 什么是uni.request()?如何使用它?
  • 用React给XXL-JOB开发一个新皮肤(一):环境搭建和项目初始化
  • 华为常用的命令——display,记得点赞收藏!
  • Costco攻入山姆大本营
  • 什么是常量?如何区分常量和变量?
  • uniapp返回上一页并刷新数据
  • LeetCode 0083.删除排序链表中的重复元素:模拟
  • Javaweb之SpringBootWeb案例新增部门的详细解析
  • 基于微信小程序的音乐平台 开源项目
  • uniapp 微信小程序跳转外部链接
  • 【STM32】FLASH闪存
  • 滴水内存地址堆栈
  • Laravel中的lockForUpdate悲观锁
  • BikeDNA(八)外在分析:OSM 与参考数据的比较2
  • 28 星际旋转
  • 测试人员必备基本功(3)
  • 记一次数据修复,需要生成十万条sql进行数据回滚
  • [paddle]paddlehub部署paddleocr的hubserving服务
  • 2024校招,网易互娱游戏测试工程师一面
  • Linux Ubuntu搭建我的世界Minecraft服务器实现好友远程联机MC游戏
  • Springboot对接ceph集群以及java利用s3对象网关接口与ceph集群交互
  • nrm使用
  • 06-微服务OpenFeigh和Sentinel持久化
  • docker 安装redis (亲测有效)
  • 利用GitHub开源项目ChatGPTNextWeb构建属于自己的ChatGPT - Docker
  • Vue3使用ElementPlus中的el-upload手动上传并调用上传接口