std::experimental::when_all
出自cppreference.com
< cpp | experimental
| 在標頭 <experimental/future> 定義
|
||
| |
(1) | (並發 TS) |
| |
(2) | (並發 TS) |
創建 std::experimental::future 對象,它將在所有輸入 future 和 std::experimental::shared_future 就緒後變為就緒。若任何輸入 future 或 shared_future 非法則行為未定義。
具體而言,令 Sequence 對 (1) 為 std::vector<typename std::iterator_traits<InputIt>::value_type>,對 (2) 為 std::tuple<std::decay_t<Futures>...>。此函數模板創建含 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 含有空 vector 且立即就緒。2) 若不提供實參,則返回
future<std::tuple<>> 且立即就緒。