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
有无共享状态和被移动的任务。类型擦除的分配器
packaged_task
的接收分配器参数 alloc
的构造函数将参数当做类型擦除的分配器。以分配器参数(若指定)确定 packaged_task
用来分配内存的 memory_resource 指针,如下:
alloc 的类型
|
memory_resource 指针的值 |
不存在(构造时不指定分配器) | 构造时 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) (无)