Namespaces
Variants

std::experimental:: when_all

From cppreference.net
定义于头文件 <experimental/future>
template < class InputIt >

auto when_all ( InputIt first, InputIt last )

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

auto when_all ( Futures && ... futures )

- > future < std:: tuple < std:: decay_t < Futures > ... >> ;
(2) (并发TS)

创建一个 future 对象,当所有输入的 future shared_future 就绪时,该对象将变为就绪状态。如果任何输入的 future shared_future 无效,则行为未定义。

具体而言,对于 (1) ,令 Sequence std:: vector < typename std:: iterator_traits < InputIt > :: value_type > ;对于 (2) ,令 Sequence 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 就绪时,该future将变为就绪状态。

1) 如果范围为空(即 first == last ),返回的 future 将包含一个空向量并立即就绪。
2) 如果没有提供任何参数,将返回一个 future<std::tuple<>> 并立即就绪。