类模板
<functional>

std::function

template <class T> function;     // undefinedtemplate <class Ret, class... Args> class function<Ret(Args...)>;
函数包装器
此类可以包装任何种类的*可调用元素*(例如*函数*和*函数对象*)到一个可复制的对象中,并且其类型仅取决于其调用签名(而不是其*可调用元素*的类型本身)。

函数包装类实例的对象可以包装以下任一类型的*可调用对象*:函数、函数指针、成员指针,或任何函数对象(即,类定义了operator()的对象,包括*闭包*)。

函数包装器对象在内部存储包装的*可调用对象*的*decay*副本,该副本成为函数的target。在实例化function包装器类时,不需要该目标*可调用对象*的具体类型;只需要其*调用签名*。

function对象可以被复制和移动,并可用于直接调用具有指定调用签名的*可调用对象*(参见成员operator())。

function对象也可以处于没有target*可调用对象*的状态。在这种情况下,它们被称为*空函数*,调用它们会抛出bad_function_call异常。

模板参数

T
一个类型。
泛化模板未定义。只有专门化T为函数类型Ret(Args...)的模板。
Ret
调用函数时产生的结果类型。
Args
参数的类型。
这是一个包含任意数量类型的*模板参数包*。
对于成员指针,第一个类型应为该成员指针所指向类的引用的类型。

成员类型

成员类型定义
result_typeRet
argument_type如果Args...是单个类型,则它是该单个类型的别名。
否则,未定义。
first_argument_type如果Args...恰好包含两个类型,则它是第一个类型的别名。
否则,未定义。
second_argument_type如果Args...恰好包含两个类型,则它是第二个类型的别名。
否则,未定义。
请注意,除了result_type之外,其他成员类型并非总是已定义。

成员函数


非成员函数重载