名前空間
変種
操作

std::experimental::when_all

From cppreference.com
 
 
 
 
ヘッダ<experimental/future>で定義
template< class InputIt >

auto when_all( InputIt first, InputIt last )

    -> future<std::vector<typename std::iterator_traits<InputIt>::value_type>>;
(1) (concurrency TS)
template< class... Futures >

auto when_all( Futures&&... futures )

    -> future<std::tuple<std::decay_t<Futures>...>>;
(2) (concurrency TS)

すべての入力 `future` および `shared_future` が準備完了になったときに準備完了になる `future` オブジェクトを作成します。いずれかの入力 `future` または `shared_future` が無効な場合、動作は未定義です。

特に、`(1)` の場合は `Sequence` を `std::vector::value_type>` とし、`(2)` の場合は `Sequence` を `std::tuple...>` とします。この関数テンプレートは `Sequence` を含む共有状態を作成し、その共有状態を参照する future を返します。すべての入力 `future` は共有状態の `Sequence` の対応するオブジェクトにムーブされ、すべての入力 `shared_future` は共有状態の `Sequence` の対応するオブジェクトにコピーされます。 `Sequence` 内のオブジェクトの順序は、引数の順序と一致します。

1) `InputIt` の値型(すなわち、`typename std::iterator_traits::value_type`)が `std::experimental::future` または `std::experimental::shared_future` である場合を除き、この関数はオーバーロード解決に参加しません。
2) すべての引数が、(cv 修飾されている可能性のある) `std::experimental::shared_future` または cv 修飾されていない `std::experimental::future` のいずれかである場合を除き、この関数はオーバーロード解決に参加しません。(形式的には、`Futures` 内の各型 `Fn` について、`std::remove_reference_t` が `std::experimental::future` であるか、または `std::decay_t` が `std::experimental::shared_future` である。)

この呼び出しの後、すべての入力 `future` は無効になります。すべての入力 `shared_future` は有効なままです。

[編集] 戻り値

呼び出しによって作成された共有状態を参照する `future`。この future は常に `valid()` であり、呼び出しのすべての入力 `future` および `shared_future` が準備完了になったときに準備完了になります。

1) 範囲が空の場合(すなわち、`first == last`)、返される `future` は空の vector を含み、すぐに準備完了になります。
2) 引数が指定されていない場合、`future>` が返され、すぐに準備完了になります。
English 日本語 中文(简体) 中文(繁體)