std::experimental::packaged_task<R(Args...)>::packaged_task (库基础 TS)

来自cppreference.com
 
 
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
概念 (概念 TS)
范围 (范围 TS)
数学特殊函数 (特殊函数 TR)
 
 
 
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>::typestd::packaged_task<R(ArgTypes...)> 为同一类型才参与重载决议。
3) 构造拥有共享状态和任务副本的 std::experimental::packaged_task 对象,以 std::forward<F>(f) 初始化。用提供的分配器分配存储任务所需的内存,分配器被当做类型擦除的分配器(见后述)。此构造函数仅若 std::decay<F>::typestd::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) 类型对象的指针,其中 Aalloc 的类型。指针仅在 packaged_task 对象的生存期内保持合法。
非以上类型 程序为病式

参数

f - 要执行的可调用目标(函数、成员函数、 lambda 表达式、仿函数)
alloc - 存储任务时使用的分配器
rhs - 要移动的 std::experimental::packaged_task

异常

2-3) 任何 f 的复制/移动构造函数可能抛出的异常,及可能的 std::bad_alloc ,若分配失败。
4) (无)