std::function
来自cppreference.com
< cpp | utility | functional
定义于头文件 <functional>
|
||
template< class > class function; /* 未定义 */ |
(C++11起) | |
template< class R, class... Args > class function<R(Args...)> |
(C++11起) | |
类模版 std::function
是一种通用、多态的函数封装。std::function
的实例可以对任何可以调用的 目标 进行存储、复制、和调用操作,这些目标包括函数、lambda 表达式、绑定表达式、以及其它函数对象等。
目录 |
[编辑] 成员类型
类型 | 定义 |
result_type
|
R
|
argument_type
|
T ,前提是 sizeof...(Args)==1 且 Args... 中有且仅有 T
|
first_argument_type
|
T1 ,前提是 sizeof...(Args)==2 且 T1 是其中的第一个
|
second_argument_type
|
T2 ,前提是 sizeof...(Args)==2 且 T2 是其中的第二个
|
[编辑] 成员函数
构造新的std::function实例 (公共成员函数) | |
析构std::function实例 (公共成员函数) | |
为内容赋值 (公共成员函数) | |
交换内容 (公共成员函数) | |
为内容赋值一个新的目标 (公共成员函数) | |
检查是否包含了有效的目标 (公共成员函数) | |
调用目标 (公共成员函数) | |
目标访问 | |
获得std::function所存储的目标的typeid (公共成员函数) | |
获得std::function所存储的目标的指针 (公共成员函数) |
[编辑] 非成员函数
(C++11) |
特化的std::swap算法 (函数模板) |
将 std::function 与 std::nullptr 相比较 (函数模板) |
[编辑] 辅助类
特化的std::uses_allocator型特征 (类模板特化) |
[编辑] 示例
#include <functional> #include <iostream> struct Foo { Foo(int num) : num_(num) {} void print_add(int i) const { std::cout << num_+i << '\n'; } int num_; }; void print_num(int i) { std::cout << i << '\n'; } struct PrintNum { void operator()(int i) const { std::cout << i << '\n'; } }; int main() { // 保存自由函数 std::function<void(int)> f_display = print_num; f_display(-9); // 保存 lambda 表达式 std::function<void()> f_display_42 = []() { print_num(42); }; f_display_42(); // 保存 std::bind 的结果 std::function<void()> f_display_31337 = std::bind(print_num, 31337); f_display_31337(); // 保存成员函数 std::function<void(const Foo&, int)> f_add_display = &Foo::print_add; Foo foo(314159); f_add_display(foo, 1); // 保存成员函数和对象 using std::placeholders::_1; std::function<void(int)> f_add_display2= std::bind( &Foo::print_add, foo, _1 ); f_add_display2(2); // 保存成员函数和对象指针 std::function<void(int)> f_add_display3= std::bind( &Foo::print_add, &foo, _1 ); f_add_display3(3); // 保存函数对象 std::function<void(int)> f_display_obj = PrintNum(); f_display_obj(18); }
输出:
-9 42 31337 314160 314161 314162 18
[编辑] 相关条目
(C++11) |
调用一个空的std::function时抛出的异常 原文: the exception thrown when invoking an empty std::function (类) |
(C++11) |
从指向成员的指针创建函数对象 原文: creates a function object out of a pointer to a member (函数模板) |