Namespaces
Variants

std::experimental::packaged_task<R(Args...)>:: packaged_task (library fundamentals TS)

From cppreference.net
packaged_task ( ) noexcept ;
(1) (库基础技术规范)
template < class F >
explicit packaged_task ( F && f ) ;
(2) (库基础技术规范)
template < class F, class Allocator >
explicit packaged_task ( std:: allocator_arg_t , const Allocator & alloc, F && f ) ;
(3) (库基础技术规范)
packaged_task ( const packaged_task & ) = delete ;
(4) (库基础技术规范)
packaged_task ( packaged_task && rhs ) noexcept ;
(5) (库基础技术规范)

构造一个新的 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 不再拥有共享状态且任务处于移出状态。

类型擦除分配器

接受分配器参数 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

异常

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