std::experimental::when_all
来自 cppreference.cn
< cpp | experimental
定义于头文件 <experimental/future> |
||
template< class InputIt > auto when_all( InputIt first, InputIt last ) |
(1) | (concurrency TS) |
template< class... Futures > auto when_all( Futures&&... futures ) |
(2) | (concurrency TS) |
创建一个 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
包含一个空 vector 并且立即就绪。2) 如果没有提供参数,则返回
future<std::tuple<>>
并且立即就绪。