std::experimental::packaged_task<R(Args...)>::packaged_task (库基础 TS)
来自 cppreference.com
< cpp | experimental | lib extensions | packaged task
packaged_task() noexcept; |
(1) | (库基础 TS) |
template< class F > explicit packaged_task( F&& f ); |
(2) | (库基础 TS) |
template< class F, class Allocator > explicit packaged_task( std::allocator_arg_t, const Allocator& alloc, F&& f ); |
(3) | (库基础 TS) |
packaged_task( const packaged_task& ) = delete; |
(4) | (库基础 TS) |
packaged_task( packaged_task&& rhs ) noexcept; |
(5) | (库基础 TS) |
构造一个新的 std::experimental::packaged_task
对象。
1) 构造一个没有任务且没有共享状态的
std::experimental::packaged_task
对象。2) 构造一个具有共享状态和任务副本的
std::experimental::packaged_task
对象,初始化为 std::forward<F>(f)。如果 std::decay<F>::type 与 std::packaged_task<R(ArgTypes...)> 类型相同,则此构造函数不参与重载解析。3) 构造一个具有共享状态和任务副本的
std::experimental::packaged_task
对象,初始化为 std::forward<F>(f)。使用提供的分配器分配存储任务所需的内存,该分配器被视为类型擦除的分配器(见下文)。如果 std::decay<F>::type 与 std::packaged_task<R(ArgTypes...)> 类型相同,则此构造函数不参与重载解析。4) 复制构造函数被删除,
std::experimental::packaged_task
只能移动。5) 使用以前由 rhs 拥有的共享状态和任务构造一个
std::experimental::packaged_task
,使 rhs 没有任何共享状态和一个被移动的任务。[编辑] 类型擦除分配器
接受分配器参数 alloc
的 packaged_task
的构造函数将该参数视为类型擦除的分配器。packaged_task
用于分配内存的内存资源指针使用分配器参数(如果指定)按以下方式确定
alloc 的类型 |
内存资源指针的值 |
不存在(构造时未指定分配器) | 构造时 std::experimental::pmr::get_default_resource() 的值。 |
std::nullptr_t | 构造时 std::experimental::pmr::get_default_resource() 的值。 |
可转换为 std::experimental::pmr::memory_resource* |
的指针类型 static_cast<std::experimental::pmr::memory_resource*>(alloc) |
的专门化 std::experimental::pmr::polymorphic_allocator |
alloc.resource() |
满足 Allocator 要求的任何其他类型 | 指向类型为 std::experimental::pmr::resource_adaptor<A>(alloc) 的值的指针,其中 A 是 alloc 的类型。该指针仅在 packaged_task 对象的生命周期内有效。 |
上述情况均不符合 | 程序格式错误。 |
[编辑] 参数
f | - | 要执行的可调用目标(函数、成员函数、lambda 表达式、仿函数) |
alloc | - | 存储任务时要使用的分配器 |
rhs | - | 要从中移动的 std::experimental::packaged_task |
[编辑] 异常
4) (无)