Namespaces
Variants

deduction guides for std::packaged_task

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
定义于头文件 <future>
template < class R, class ... Args >
packaged_task ( R ( * ) ( Args... ) ) - > packaged_task < R ( Args... ) > ;
(1) (C++17 起)
template < class F >
packaged_task ( F ) - > packaged_task < /*见下文*/ > ;
(2) (C++17 起)
template < class F >
packaged_task ( F ) - > packaged_task < /*见下文*/ > ;
(3) (C++23 起)
template < class F >
packaged_task ( F ) - > packaged_task < /*见下文*/ > ;
(4) (C++23 起)
1) 推导指引 std::packaged_task 提供,允许从函数进行推导。
2) 此重载仅当满足以下条件时才参与重载决议: & F :: operator ( ) 作为未求值操作数时格式正确,且 decltype ( & F :: operator ( ) ) 的形式为 R ( G :: * ) ( A... ) (可选的 cv 限定、可选的 noexcept 限定、可选的左值引用限定)。推导出的类型为 std:: packaged_task < R ( A... ) >
3) 此重载仅当满足以下条件时参与重载决议: & F :: operator ( ) 作为未求值操作数时格式正确,且 F :: operator ( ) 是一个 显式对象参数函数 ,其类型为 R ( G, A... ) R ( G, A... ) noexcept 形式。推导出的类型为 std:: packaged_task < R ( A... ) >
4) 此重载仅当满足以下条件时参与重载决议: & F :: operator ( ) 作为未求值操作数时格式正确,且 F :: operator ( ) 是类型为 R ( A... ) R ( A... ) noexcept 形式的 静态成员函数 。推导出的类型为 std:: packaged_task < R ( A... ) >

注释

这些推导指引不允许从带有 省略号参数 的函数进行推导,且类型中的 ... 始终被视为 包展开

示例

#include <future>
int func(double) { return 0; }
int main()
{
    std::packaged_task f{func}; // 推导出 packaged_task<int(double)>
    int i = 5;
    std::packaged_task g = [&](double) { return i; }; // => packaged_task<int(double)>
}