名稱空間
變體
操作

std::experimental::when_all

來自 cppreference.com
< cpp‎ | 實驗性
定義於標頭檔案 <experimental/future>
template< class InputIt >

auto when_all( InputIt first, InputIt last )

    -> future<std::vector<typename std::iterator_traits<InputIt>::value_type>>;
(1) (併發技術規範)
template< class... Futures >

auto when_all( Futures&&... futures )

    -> future<std::tuple<std::decay_t<Futures>...>>;
(2) (併發技術規範)

建立一個 future 物件,當所有輸入的 futureshared_future 準備就緒時,該物件也變為就緒。如果任何輸入的 futureshared_future 無效,則行為未定義。

特別地,令 Sequencestd::vector<typename std::iterator_traits<InputIt>::value_type>(對於 (1))和 std::tuple<std::decay_t<Futures>...>(對於 (2))。此函式模板建立一個包含 Sequence 的共享狀態,並返回一個指向該共享狀態的 future。每個輸入的 future 被移動到共享狀態中 Sequence 的相應物件,每個輸入的 shared_future 被複制到共享狀態中 Sequence 的相應物件。Sequence 中物件的順序與引數的順序匹配。

1) 除非 InputIt 的值型別(即 typename std::iterator_traits<InputIt>::value_type)是 std::experimental::futurestd::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(),當所有輸入的 futureshared_future 準備就緒時,它也變為就緒。

1) 如果範圍為空(即 first == last),返回的 future 包含一個空向量,並立即準備就緒。
2) 如果未提供引數,則返回一個 future<std::tuple<>>,並立即準備就緒。