std::experimental::when_all
来自cppreference.com
< cpp | experimental
在标头 <experimental/future> 定义
|
||
template< class InputIt > auto when_all( InputIt first, InputIt last ) |
(1) | (并发 TS) |
template< class... Futures > auto when_all( Futures&&... futures ) |
(2) | (并发 TS) |
创建 future 对象,它将在所有输入 future
和 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<>>
且立即就绪。