std::function
定义于头文件
template<class>
class function; /*未定义*/
template < class R, class... Args>
class function<R(Args...)>;
类模板 std::function
是一种通用目的的多态函数封装器。std::function
实例能够存储,拷贝,和调用任何CopyConstructible Callable
的对象–函数,lambda 表达式,bind 表达式,或者其他函数对象,和成员函数指针以及数据成员指针。
存储的可调用对象被称为std::function
的target
。如果一个 std::function
不包含目标,它被称为empty
。调用一个 empty
std::function
的 target
会导致std::bad_function_call
异常抛出。std::function
满足CopyConstructible
和 CopyAssignable
的要求。
Member function
operator()
R operator()(Args... args) const;
使用参数args调用存储的可调用函数目标。
执行INVOKE<R>(f, std::forward<Args>(args)...)
, f 是 *this 的目标对象,INVOKE 是在 Callable
中描述的操作。
Parameter
args - 存储的可调用函数对象的传参
Return value
R 为 void
是无任何返回值,否则是存储的可调用对象的调用返回值。
Exceptions
std:;bad_function_call
如果*this
没有存储任何可调用函数 target,i.e.!*this == true
。
Example
#include <iostream>
#include <functional>
void call(std::function<int()> f) // can be passed by value