命名空间
变体
操作

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

来自 cppreference.cn
 
 
实验性
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行性扩展 (并行性 TS)
并行性扩展 2 (并行性 TS v2)
并发性扩展 (并发性 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
实验性非 TS
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
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) 构造一个 std::experimental::packaged_task,其共享状态和任务原先由 rhs 拥有,使 rhs 没有共享状态且任务已被移动。

[编辑] 类型擦除的分配器

packaged_task 接受分配器参数 alloc 的构造函数将该参数视为类型擦除的分配器。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()
满足 分配器 要求的任何其他类型 指向 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) (无)