函数对象

来自cppreference.com
< cpp‎ | utility
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

初等字符串转换
(C++17)
(C++17)
栈踪
 
函数对象
函数包装
(C++11)
(C++11)
部分函数应用
(C++11)
(C++20)
函数调用
(C++17)(C++23)
恒等函数对象
(C++20)
引用包装
(C++11)(C++11)
通透运算符包装
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
取反器
(C++17)
搜索器
旧绑定器与适配器
(C++17 前)
(C++17 前)
(C++17 前)
(C++17 前)
(C++17 前)(C++17 前)(C++17 前)(C++17 前)
(C++20 前)
(C++20 前)
(C++17 前)(C++17 前)
(C++17 前)(C++17 前)

(C++17 前)
(C++17 前)(C++17 前)(C++17 前)(C++17 前)
(C++20 前)
(C++20 前)
 

任何定义了函数调用操作符的对象都是函数对象。C++ 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。

函数包装器

std::function 提供存储任意类型函数对象的支持。

(C++11)
包装具有指定函数调用签名的任意可复制构造类型的可调用对象
(类模板)
包装具有指定函数调用签名的任意类型的可调用对象
(类模板)
调用空的 std::function 时抛出的异常
(类)
(C++11)
从成员指针创建出函数对象
(函数模板)

函数调用

std::invoke 能以给定参数调用任何可调用 (Callable) 对象。

(C++17)(C++23)
以给定实参和可能指定的返回类型 (C++23 起)调用任意可调用 (Callable) 对象
(函数模板)

恒等

std::identity 是恒等函数对象:它返回其不修改的参数。

(C++20)
返回其未修改的参数的函数对象
(类)

部分函数应用

std::bind_frontstd::bind 提供部分函数应用的支持,即绑定参数到函数以创建新函数。

按顺序绑定一定数量的参数到函数对象
(函数模板)
(C++11)
绑定一或多个实参到函数对象
(函数模板)
指示对象为 std::bind 表达式,或能被用作这种表达式
(类模板)
表明一个对象是标准占位符,或者可以用作标准占位符
(类模板)
定义于命名空间 std::placeholders
用作 std::bind 表达式中的未绑定实参的占位符
(常量)

取反器

std::not_fn 创建对传递给它的可调用对象的结果取反的函数对象。

(C++17)
创建返回其保有的函数对象的结果之补的函数对象
(函数模板)

搜索器

提供实现数种字符串搜索算法的搜索器。它们能直接使用或用于 std::search

标准 C++ 库搜索算法实现
(类模板)
Boyer-Moore 搜索算法实现
(类模板)
Boyer-Moore-Horspool 搜索算法实现
(类模板)

引用包装器

引用包装器允许存储引用到可复制的函数对象中:

可复制构造 (CopyConstructible) 可复制赋值 (CopyAssignable) 的引用包装器
(类模板)
(C++11)(C++11)
创建具有从其实参推导的类型的 std::reference_wrapper
(函数模板)
获取包装于 std::reference_wrapper 的引用类型
(类模板)

运算符函数对象

C++ 针对常用的算术和逻辑运算定义了很多函数对象:

算术运算
实现 x + y 的函数对象
(类模板)
实现 x - y 的函数对象
(类模板)
实现 x * y 的函数对象
(类模板)
实现 x / y 的函数对象
(类模板)
实现 x % y 的函数对象
(类模板)
实现 -x 的函数对象
(类模板)
比较
实现 x == y 的函数对象
(类模板)
实现 x != y 的函数对象
(类模板)
实现 x > y 的函数对象
(类模板)
实现 x < y 的函数对象
(类模板)
实现 x >= y 的函数对象
(类模板)
实现 x <= y 的函数对象
(类模板)
逻辑运算
实现 x && y 的函数对象
(类模板)
实现 x || y 的函数对象
(类模板)
实现 !x 的函数对象
(类模板)
位运算
实现 x & y 的函数对象
(类模板)
实现 x | y 的函数对象
(类模板)
实现 x ^ y 的函数对象
(类模板)
(C++14)
实现 ~x 的函数对象
(类模板)

受约束的比较函数对象

C++20 定义一组受约束的比较函数对象。相等运算符 (ranges::equal_toranges::not_equal_to) 要求参数类型实现 equality_comparable_with 。关系运算符( ranges::lessranges::greaterranges::less_equalranges::greater_equal )要求参数类型实现 totally_ordered_with 。三路比较运算符( compare_three_way )要求参数类型实现 three_way_comparable_with

实现 x == y 的函数对象
(类)
实现 x != y 的函数对象
(类)
实现 x < y 的函数对象
(类)
实现 x > y 的函数对象
(类)
实现 x <= y 的函数对象
(类)
实现 x >= y 的函数对象
(类)
实现 x <=> y 的函数对象
(类)

旧式绑定器与适配器

早期提供功能支持的几个工具在 C++11 中弃用,并于 C++17 中移除(旧否定器于 C++17 中弃用并于 C++20 中移除):

基类
(C++11 中弃用)(C++17 中移除)
与适配器兼容的一元函数基类
(类模板)
(C++11 中弃用)(C++17 中移除)
与适配器兼容的二元函数基类
(类模板)
绑定器
(C++11 中弃用)(C++17 中移除)
持有一个二元函数及其实参之一的函数对象
(类模板)
(C++11 中弃用)(C++17 中移除)
将一个实参绑定到二元函数
(函数模板)
函数适配器
(C++11 中弃用)(C++17 中移除)
适配器兼容的包装,用于包装一元函数的指针
(类模板)
(C++11 中弃用)(C++17 中移除)
适配器兼容的包装,用于包装二元函数的指针
(类模板)
(C++11 中弃用)(C++17 中移除)
从函数指针创建与适配器兼容的函数对象包装器
(函数模板)
(C++11 中弃用)(C++17 中移除)
指向零元或一元成员函数指针的包装器,可以一个对象指针调用
(类模板)
(C++11 中弃用)(C++17 中移除)
从成员函数指针创建包装器,可以一个对象指针调用
(函数模板)
指向零元或一元成员函数指针的包装器,可以一个对象引用调用
(类模板)
(C++11 中弃用)(C++17 中移除)
从成员函数指针创建包装器,能以一个对象引用调用
(函数模板)
(C++17 中弃用)(C++20 中移除)
包装器函数对象,返回所持有的一元谓词的补
(类模板)
(C++17 中弃用)(C++20 中移除)
包装器函数对象,返回所持有的二元谓词的补
(类模板)
(C++17 中弃用)(C++20 中移除)
构造定制的 std::unary_negate 对象
(函数模板)
(C++17 中弃用)(C++20 中移除)
构造定制的 std::binary_negate 对象
(函数模板)