std::experimental::when_any
| ヘッダ <experimental/future>で定義 |
||
| template< class Sequence > struct when_any_result { |
(concurrency TS) | |
| template< class InputIt > auto when_any( InputIt first, InputIt last ) |
(1) | (concurrency TS) |
| template< class... Futures > auto when_any( Futures&&... futures ) |
(2) | (concurrency TS) |
入力された `future` および `shared_future` のうち、少なくとも1つが完了したときに完了する `future` オブジェクトを作成します。入力された `future` または `shared_future` が無効な場合、動作は未定義です。
具体的には、Sequence が `(1)` では `std::vector<typename std::iterator_traits<InputIt>::value_type>` であり、`(2)` では `std::tuple<std::decay_t<Futures>...>` であるとします。この関数テンプレートは、when_any_result<Sequence> を含む共有状態を作成し、その共有状態を参照する future を返します。入力された各 `future` は、共有状態内の `when_any_result<Sequence>` の `futures` メンバの対応するオブジェクトにムーブされ、入力された各 `shared_future` は、共有状態内の `when_any_result<Sequence>` の `futures` メンバの対応するオブジェクトにコピーされます。`Sequence` 内のオブジェクトの順序は、引数の順序と一致します。
InputIt の値型(すなわち、typename std::iterator_traits<InputIt>::value_type)が `std::experimental::future` または `std::experimental::shared_future` である場合を除き、オーバーロード解決に参加しません。この呼び出しの後、入力されたすべての `future` は無効になります。入力されたすべての `shared_future` は有効なままです。
[編集] 戻り値
呼び出しによって作成された共有状態を参照する `future`。この future は常に `valid()` であり、入力された `future` および `shared_future` のうち少なくとも1つが完了したときに完了します。`when_any_result` の `index` メンバには、`futures` メンバ内の完了した `future` または `shared_future` の位置が含まれています。