std::function::function
来自cppreference.com
< cpp | utility | functional | function
function() noexcept; |
(1) | (C++11 起) |
function( std::nullptr_t ) noexcept; |
(2) | (C++11 起) |
function( const function& other ); |
(3) | (C++11 起) |
function( function&& other ); |
(4) | (C++11 起) |
template< class F > function( F f ); |
(5) | (C++11 起) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc ) noexcept; |
(6) | (C++11 起) (C++17 中移除) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, |
(7) | (C++11 起) (C++17 中移除) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, |
(8) | (C++11 起) (C++17 中移除) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, |
(9) | (C++11 起) (C++17 中移除) |
template< class F, class Alloc > function( std::allocator_arg_t, const Alloc& alloc, F f ); |
(10) | (C++11 起) (C++17 中移除) |
从各种资源构造 std::function
。
1-2) 构造空 function 。
3-4) 复制 (3) 或移动 (4)
other
的目标到 *this 的目标。若 other
为空,则调用后 *this 将亦为空。对于 (4) , other
在调用后处于合法但未指定的状态。5) 以
f
的副本初始化目标。若 f
是空指针或指向成员的空指针,则 *this 在此调用后将为空。此构造函数不参与重载决议,除非 f 对于参数类型 Args...
和返回类型 R
可调用 (Callable
) 。 (C++14 起)6-10) 同 (1-5) ,除了将
alloc
用于分配任何 function
会用到的内部数据结构的内存。target是函数指针或 std::reference_wrapper 时,保证使用小对象优化,即这些目标始终直接存储于 std::function 对象中,不发生动态内存分配。其他大对象可以构造于动态分配的存储中,并为 std::function 对象通过指针访问。
目录 |
[编辑] 参数
other | - | 用于初始化 *this 的函数对象 |
f | - | 用于初始化 *this 的可调用对象 |
alloc | - | 用于内部内存分配的分配器 (Allocator )
|
类型要求 | ||
-F 必须满足 Callable 和 CopyConstructible 的要求。
| ||
-Alloc 必须满足 Allocator 的要求。
|
[编辑] 异常
3,4,8,9) 若
other
的目标是函数指针或 std::reference_wrapper ,则不抛出,否则可能抛出 std::bad_alloc 或任何用于复制或移动存储的可调用对象的构造函数所抛的异常。5,10) 若
f
是函数指针或 std::reference_wrapper ,则不抛出,否则可能抛出 std::bad_alloc 或任何存储对象的复制构造函数所抛的异常。[编辑] 注意
std::function
的分配器支持说明贫乏,且实现不一致。一些实现完全不提供重载 (6-10) ,一些提供重载但忽略提供的分配器参数,而一些实现提供重载并将提供的分配器用于构造,但不在重赋值 std::function
时使用。结果, C++17 中移除了分配器支持。
[编辑] 示例
本节未完成 原因:暂无示例 |