<functional>
定义标准库函数帮助构造函数对象—也被称为functors—和它们的binders。 方法对象是定义operator()类型对象。 函数对象可以是函数指针,但是更常见的,用于存储附加信息的对象可在调用过程中获取。
#include <functional>
备注
算法要求两种类型的函数对象:一元和二进制。 一元求函数对象需要一个参数,因此,二进制函数对象需要两个参数。 函数对象和函数指针可作为算法谓词,但函数对象还能够处理并增加 STL 的大小、灵活性和效率。 如果,例如,值在传递给算法之前需要绑定到函数,则不能使用函数指针。 功能适配器转换函数指针转换为可绑定到值的灵活的函数对象。 头<functional>也包含成员函数的适配器,允许成员函数作为适应性函数对象被调用。 如果他们有指定其参数和返回类型的嵌套的类型声明,函数能够处理的。 C++ 标准要求,这种适应性是通过让所有标准对象类从unary_function或binary_function的基类继承来实现的。 函数对象及其适配器允许 STL 升级现有应用程序和帮助集成 STL C++ 程序环境。
在 <functional> 中Visual C++函数对象的实现包括transparent operator functors,这是标准的函数对象的特殊化,不采取任何模板参数,并且完美传递函数的参数,完美返回结果。 此函数是 C++14 草案标准规范的一部分。 当您调用算法,比较,逻辑和按位运算符 functors时,这些模板专用化不要求指定参数类型。 可以重载您的类型的算术,比较,逻辑、按位运算符,或类型的不同组合的,然后使用透明运算符 functors 作为函数参数。 例如, 如果您指定 MyType 实现 operator<,可以调用 sort(my_collection.begin(), my_collection.end(), less<>())而不是显式指定类型 sort(my_collection.begin(), my_collection.end(), less<MyType>()).
C++11/C++14 实现。
以下功能在 C++11/C++14 的 Visual C++ 实现添加:
call signature是一个返回类型的名称,后跟一列带括号逗号分隔的零个或多个参数类型。
callable type是一个指向函数的指针,一个指向成员函数的指针,一个指向成员数据的指针,或一个类类型,它的对象可以立即显示在函数调用操作符的左边。
callable object是一个可调用类型的对象
A call wrapper type 类型是持有一个可调用对象,并支持传递到该对象的调用操作的类型。
call wrapper是一个调用包装器类型的对象
target object是被调用包装器对象持有的可调用对象。
pseudo-function INVOKE(f, t1, t2, ..., tN)表示下列事情之一:
(t1.*f)(t2, ..., tN)当f是一个指向类T 的成员函数的指针,并且,t1是T类型或T类型对象的引用或T类型的派生类对象的引用。
((*t1).*f)(t2, ..., tN)当f是一个指向类T 的成员函数的指针,并且,t1不是上述项所描述的任何一类。
t1.*f当 N == 1 并且 f是一个指向类T 的成员数据的指针,并且,t1是T类型或T类型对象的引用或T类型的派生类对象的引用。
(*t1).*f当N == 1并且f是一个指向类T 的成员数据的指针,并且,t1不是上述项所描述的任何一类。
f(t1, t2, ..., tN)在所有其他情况下。
伪函数数INVOKE(f, t1, t2, ..., tN, R) 表示 INVOKE(f, t1, t2, ..., tN)隐式转换为 R。
如果调用包装器有weak result type,它的成员类型result_type的类型是根据 包装的目标对象的T,如下所示:
如果 T是一个函数的指针, result_type是一个T的返回类型别名。
如果 T是一个成员函数的指针, result_type是一个T的返回类型别名。
如果 T是一个 有成员类型为result_type的类类型, 那么result_type是一个T::result_type的返回类型别名。
否则,没有成员 result_type。
每个调用包装具有移动构造函数和复制构造函数。 一个simple call wrapper是一个调用包装器,有一个赋值运算符,其拷贝构造函数,移动构造器和赋值操作符不会抛出异常。 一个forwarding call wrapper是一个调用包装器,它可以通过使用任意的参数列表被调用,并且为包装可调用的对象传递参数的引用。 右值的所有参数都作为右值引用,左值的参数均作为左值引用。
类
类描述异常,该异常指示function对象上的operator()调用失败,因为该对象为空。 |
|
提供消除一个指定的二元函数的返回值的成员函数的模板选件类。 |
|
模板类提供一个构造函数,通过将二元函数的第一个参数绑定到指定值,将二元函数对象转换成一个一元函数对象。 |
|
模板类提供一个构造函数,通过将二元函数的第二个参数绑定到指定值,将二元函数对象转换成一个一元函数对象。 |
|
一个适配器类,它允许一个没有参数的const成员函数作为一元函数对象被调用,该一元函数初始化时有一个引用参数。 |
|
一个适配器类,它允许一个没有参数的const成员函数作为一元函数对象被调用,该一元函数初始化时有一个指针参数。 |
|
一个适配器类,它允许有一个参数的const成员函数作为二元函数对象被调用,该一元函数初始化时有一个引用参数。 |
|
一个适配器类,它允许有一个参数的const成员函数作为二元函数对象被调用,该一元函数初始化时有一个指针参数。 |
|
包装可调用对象的类。 |
|
计算值的哈希代码的类。 |
|
用来测试某个类型是否是通过调用bind生成的的类。 |
|
用来测试某个类型是否是占位符的类。 |
|
一个适配器类,它允许一个没有参数的non_const成员函数作为一元函数对象被调用,该一元函数初始化时有一个引用参数。 |
|
一个适配器类,它允许一个没有参数的non_const成员函数作为一元函数对象被调用,该一元函数初始化时有一个指针参数。 |
|
一个适配器类,它允许有一个参数的non_const成员函数作为二元函数对象被调用,该一元函数初始化时有一个引用参数。 |
|
一个适配器类,它允许有一个参数的non_const成员函数作为二元函数对象被调用,该一元函数初始化时有一个指针参数。 |
|
将二元函数指针转换为灵活的二元函数。 |
|
将一元函数指针转换为灵活的一元函数。 |
|
包装引用的类。 |
|
持有一个包装可调用对象的返回类型的结构。 |
|
提供消除一个指定的一元函数的返回值的成员函数的模板选件类。 |
函数
绑定参数为可调用的对象。 |
|
一个辅助模板函数,它创建一个适配器,通过将二元函数的第一个参数绑定为指定值,将二元函数对象转换为一元函数对象。 |
|
一个辅助模板函数,它创建一个适配器,通过将二元函数的第二个参数绑定为指定值,将二元函数对象转换为一元函数对象。 |
|
返回两个参数的按位逻辑AND(二元运算符&)。 |
|
返回参数的按位逻辑求补 (operator~)。 |
|
返回两个参数的按位逻辑OR(运算符|)。 |
|
返回两个参数的按位逻辑XOR(运算符^)。 |
|
从一个参数中构造const reference_wrapper。 |
|
产生简单调用包装器。 |
|
辅助模板函数用于在用指针参数初始化时,构造成员函数的函数对象适配器。 |
|
辅助模板函数用于在用引用参数初始化时,构造成员函数的函数对象适配器。 |
|
返回一元谓词的补充。 |
|
返回二元谓词的补充。 |
|
辅助模板函数用于将一元和二元函数指针,分别转化为一元和二元的灵活的函数。 |
|
从一个参数中构造 reference_wrapper。 |
|
交换两个 function 对象。 |
结构
空基类,它定义了可以被派生类继承的类型,该派生类提供了一个二元函数对象。 |
|
这个类提供了一个预定义的函数对象,执行指定值类型的元素的除法算术运算。 |
|
二元谓词测试一个指定类型的值是否等于该类型的另一个值。 |
|
二元谓词测试一个指定类型的值是否大于该类型的另一个值。 |
|
二元谓词测试一个指定类型的值是否大于等于该类型的另一个值。 |
|
二元谓词测试一个指定类型的值是否小于该类型的另一个值。 |
|
二元谓词测试一个指定类型的值是否小于等于该类型的另一个值。 |
|
这个类提供了一个预定义的函数对象,执行一个指定的值类型的元素的与逻辑运算,并试验结果的真或假。 |
|
这个类提供了一个预定义的函数对象,执行一个指定的值类型的元素的取反逻辑运算,并试验结果的真或假。 |
|
这个类提供了一个预定义的函数对象,执行一个指定的值类型的元素的或逻辑运算,并试验结果的真或假。 |
|
这个类提供了一个预定义的函数对象,执行指定值类型的元素的减法算术运算。 |
|
这个类提供了一个预定义的函数对象,执行指定值类型的元素的模算术运算。 |
|
这个类提供了一个预定义的函数对象,执行指定值类型的元素的乘法算术运算。 |
|
这个类提供了一个预定义的函数对象,返回元素值的负数。 |
|
二元谓词测试一个指定类型的值是否不等于该类型的另一个值。 |
|
这个类提供了一个预定义的函数对象,执行指定值类型的元素的加法算术运算。 |
|
空基类,它定义了可以被派生类继承的类型,该派生类提供了一个一元函数对象。 |
对象
可替换参数的占位符。 |
运算符
禁止可调用的对象相等比较。 |
|
禁止不可调用的对象相等比较。 |