std::packaged_task
的推导指引
出自cppreference.com
< cpp | thread | packaged task
在標頭 <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 起) |
2) 此重載只有在 &F::operator() 在作為不求值操作數時為良構且 decltype(&F::operator()) 的形式為 R(G::*)(A...)(可選地有 cv 限定,可選地有 noexcept,可選地有左值引用限定)而
G
為類類型時才會參與重載決議。推導類型為 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)> }