std::
function
类模板 <functional>
template <class T> function; // undefined
template <class Ret, class... Args> class function<Ret(Args...)>;
|
函数包装器
可以将任何类型的可调用元素(如函数和函数对象)包装为可复制对象的类,
其类型仅取决于其调用签名(而不取决于可调用元素类型本身)。
function类实例化的对象可以包装以下任何类型的可调用对象:函数、函数指针、指向成员的指针或任何类型的函数对象
(即类定义operator()的对象,包括closures)。
函数的target是一个对象,内部有封装的可调用对象的decay副本.
目标可调用对象的具体类型不在于function实例化包装器类;而只取决于它的调用签名。
function对象可以被复制和移动,并且可以用指定的调用签名直接调用可调用对象(请参阅成员operator())。
function对象也可以处于没有目标可调用对象的状态。在这种情况下,它们被称为空函数,
调用它们会抛出bad_function_call异常。
☲ 模板参数
-
T
-
一个类型。
泛型模板没有定义。只有一个专门的T作为函数类型Ret(Args…)。
-
Ret
-
引用函数调用所产生的类型。
-
args...
-
参数的类型。
这是一个具有任意数量类型的模板参数包。
对于指向成员的指针,第一个类型应该是对成员所指向的类类型的引用。
☲ 成员类型
成员类型 |
定义 |
result_type |
Ret |
argument_type |
如果Args……是单一类型,则它是该单一类型的别名。
否则,没有定义。 |
first_argument_type |
如果Args……是恰好由两种类型组成的包,它是第一种类型的别名。
否则,没有定义。 |
second_argument_type |
如果Args……是恰好由两种类型组成的包,它是第二种类型的别名。
否则,没有定义。 |
☲ 成员函数
☲ 非成员函数重载