<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是一个调用包装器,它可以通过使用任意的参数列表被调用,并且为包装可调用的对象传递参数的引用。 右值的所有参数都作为右值引用,左值的参数均作为左值引用。

bad_function_call

类描述异常,该异常指示function对象上的operator()调用失败,因为该对象为空。

binary_negate

提供消除一个指定的二元函数的返回值的成员函数的模板选件类。

binder1st

模板类提供一个构造函数,通过将二元函数的第一个参数绑定到指定值,将二元函数对象转换成一个一元函数对象。

binder2nd

模板类提供一个构造函数,通过将二元函数的第二个参数绑定到指定值,将二元函数对象转换成一个一元函数对象。

const_mem_fun_ref_t

一个适配器类,它允许一个没有参数的const成员函数作为一元函数对象被调用,该一元函数初始化时有一个引用参数。

const_mem_fun_t

一个适配器类,它允许一个没有参数的const成员函数作为一元函数对象被调用,该一元函数初始化时有一个指针参数。

const_mem_fun1_ref_t

一个适配器类,它允许有一个参数的const成员函数作为二元函数对象被调用,该一元函数初始化时有一个引用参数。

const_mem_fun1_t

一个适配器类,它允许有一个参数的const成员函数作为二元函数对象被调用,该一元函数初始化时有一个指针参数。

function

包装可调用对象的类。

hash

计算值的哈希代码的类。

is_bind_expression

用来测试某个类型是否是通过调用bind生成的的类。

is_placeholder

用来测试某个类型是否是占位符的类。

mem_fun_ref_t

一个适配器类,它允许一个没有参数的non_const成员函数作为一元函数对象被调用,该一元函数初始化时有一个引用参数。

mem_fun_t

一个适配器类,它允许一个没有参数的non_const成员函数作为一元函数对象被调用,该一元函数初始化时有一个指针参数。

mem_fun1_ref_t

一个适配器类,它允许有一个参数的non_const成员函数作为二元函数对象被调用,该一元函数初始化时有一个引用参数。

mem_fun1_t

一个适配器类,它允许有一个参数的non_const成员函数作为二元函数对象被调用,该一元函数初始化时有一个指针参数。

pointer_to_binary_function

将二元函数指针转换为灵活的二元函数。

pointer_to_unary_function

将一元函数指针转换为灵活的一元函数。

reference_wrapper

包装引用的类。

result_of

持有一个包装可调用对象的返回类型的结构。

unary_negate

提供消除一个指定的一元函数的返回值的成员函数的模板选件类。

函数

bind

绑定参数为可调用的对象。

bind1st

一个辅助模板函数,它创建一个适配器,通过将二元函数的第一个参数绑定为指定值,将二元函数对象转换为一元函数对象。

bind2nd

一个辅助模板函数,它创建一个适配器,通过将二元函数的第二个参数绑定为指定值,将二元函数对象转换为一元函数对象。

bit_and

返回两个参数的按位逻辑AND(二元运算符&)。

bit_not

返回参数的按位逻辑求补 (operator~)。

bit_or

返回两个参数的按位逻辑OR(运算符|)。

bit_xor

返回两个参数的按位逻辑XOR(运算符^)。

cref

从一个参数中构造const reference_wrapper。

mem_fn

产生简单调用包装器。

mem_fun

辅助模板函数用于在用指针参数初始化时,构造成员函数的函数对象适配器。

mem_fun_ref

辅助模板函数用于在用引用参数初始化时,构造成员函数的函数对象适配器。

not1

返回一元谓词的补充。

not2

返回二元谓词的补充。

ptr_fun

辅助模板函数用于将一元和二元函数指针,分别转化为一元和二元的灵活的函数。

ref

从一个参数中构造 reference_wrapper。

swap

交换两个 function 对象。

结构

binary_function

空基类,它定义了可以被派生类继承的类型,该派生类提供了一个二元函数对象。

divides

这个类提供了一个预定义的函数对象,执行指定值类型的元素的除法算术运算。

equal_to

二元谓词测试一个指定类型的值是否等于该类型的另一个值。

greater

二元谓词测试一个指定类型的值是否大于该类型的另一个值。

greater_equal

二元谓词测试一个指定类型的值是否大于等于该类型的另一个值。

less

二元谓词测试一个指定类型的值是否小于该类型的另一个值。

less_equal

二元谓词测试一个指定类型的值是否小于等于该类型的另一个值。

logical_and

这个类提供了一个预定义的函数对象,执行一个指定的值类型的元素的与逻辑运算,并试验结果的真或假。

logical_not

这个类提供了一个预定义的函数对象,执行一个指定的值类型的元素的取反逻辑运算,并试验结果的真或假。

logical_or

这个类提供了一个预定义的函数对象,执行一个指定的值类型的元素的或逻辑运算,并试验结果的真或假。

减号

这个类提供了一个预定义的函数对象,执行指定值类型的元素的减法算术运算。

modulus

这个类提供了一个预定义的函数对象,执行指定值类型的元素的模算术运算。

multiplies

这个类提供了一个预定义的函数对象,执行指定值类型的元素的乘法算术运算。

negate

这个类提供了一个预定义的函数对象,返回元素值的负数。

not_equal_to

二元谓词测试一个指定类型的值是否不等于该类型的另一个值。

加号

这个类提供了一个预定义的函数对象,执行指定值类型的元素的加法算术运算。

unary_function

空基类,它定义了可以被派生类继承的类型,该派生类提供了一个一元函数对象。

对象

_1.._M

可替换参数的占位符。

运算符

运算符==

禁止可调用的对象相等比较。

运算符!=

禁止不可调用的对象相等比较。

请参见

参考

C++ 标准库中的线程安全

标准模板库

其他资源

functional 成员

C++ 标准库头文件