std::experimental::when_all
來自 cppreference.com
定義於標頭檔案 <experimental/future> |
||
template< class InputIt > auto when_all( InputIt first, InputIt last ) |
(1) | (併發技術規範) |
template< class... Futures > auto when_all( Futures&&... futures ) |
(2) | (併發技術規範) |
建立一個 future 物件,當所有輸入的 future
和 shared_future 準備就緒時,該物件也變為就緒。如果任何輸入的 future
或 shared_future
無效,則行為未定義。
特別地,令 Sequence
為 std::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::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) 如果範圍為空(即 first == last),返回的
future
包含一個空向量,並立即準備就緒。2) 如果未提供引數,則返回一個
future<std::tuple<>>
,並立即準備就緒。