名前空間
変種
操作

std::experimental::when_any

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

struct when_any_result {
    std::size_t index;
    Sequence futures;

};
(concurrency TS)
template< class InputIt >

auto when_any( InputIt first, InputIt last )

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

auto when_any( Futures&&... futures )

    -> future<when_any_result<std::tuple<std::decay_t<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` 内のオブジェクトの順序は、引数の順序と一致します。

1) この関数は、InputIt の値型(すなわち、typename std::iterator_traits<InputIt>::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<Fn>` が `std::experimental::future<Rn>` であるか、または `std::decay_t<Fn>` が `std::experimental::shared_future<Rn>` であるかのいずれかです。)

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

[編集] 戻り値

呼び出しによって作成された共有状態を参照する `future`。この future は常に `valid()` であり、入力された `future` および `shared_future` のうち少なくとも1つが完了したときに完了します。`when_any_result` の `index` メンバには、`futures` メンバ内の完了した `future` または `shared_future` の位置が含まれています。

1) 範囲が空の場合(すなわち、`first == last`)、返される `future` は直ちに完了します。`when_any_result` の `futures` フィールドは空の vector であり、`index` フィールドは `size_t(-1)` です。
2) 引数が提供されない場合、返される `future` は直ちに完了します。`when_any_result` の `futures` フィールドは空の tuple であり、`index` フィールドは `size_t(-1)` です。
English 日本語 中文(简体) 中文(繁體)