名前空間
変種
操作

std::packaged_task の推論ガイド

From cppreference.com
 
 
並行性サポートライブラリ
スレッド
(C++11)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
協調的なキャンセル
排他制御
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
安全なメモリ解放 (Safe Reclamation)
(C++26)
ハザードポインタ
アトミック型
(C++11)
(C++20)
アトミック型の初期化
(C++11)(C++20で非推奨)
(C++11)(C++20で非推奨)
メモリオーダー
(C++11)(C++26で非推奨)
アトミック操作のためのフリー関数
アトミックフラグのためのフリー関数
 
 
ヘッダ <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() が評価されないオペランドとして扱われた場合に well-formed であり、かつ decltype(&F::operator())R(G::*)(A...) の形式(オプションで cv 修飾、オプションで noexcept、オプションで lvalue 参照修飾)である場合にのみ、オーバーロード解決に参加します。推論される型は std::packaged_task<R(A...)> です。
3) このオーバーロードは、&F::operator() が評価されないオペランドとして扱われた場合に well-formed であり、かつ F::operator()明示的なオブジェクトパラメータ関数であり、その型が R(G, A...) または R(G, A...) noexcept の形式である場合にのみ、オーバーロード解決に参加します。推論される型は std::packaged_task<R(A...)> です。
4) このオーバーロードは、&F::operator() が評価されないオペランドとして扱われた場合に well-formed であり、かつ 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}; // deduces packaged_task<int(double)>
 
    int i = 5;
    std::packaged_task g = [&](double) { return i; }; // => packaged_task<int(double)>
}
English 日本語 中文(简体) 中文(繁體)