std::experimental::when_any
定义于头文件 <experimental/future>
|
||
template < class Sequence > struct when_any_result { |
(并发 TS) | |
template < class InputIt > auto when_any(InputIt first, InputIt last); |
(1) | (并发 TS) |
template < class... Futures > auto when_any(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>...> 。此函数模板创建含 when_any_result<Sequence>
的共享状态,并返回指代该共享状态的 future
。移动每个输入 future
到共享状态中的 when_any_result<Sequence>
的 futures
成员的对应对象中,复制每个输入 shared_future
到共享状态中的 when_any_result<Sequence>
的 futures
成员中的对应对象。 Sequence
中的对象顺序匹配参数的顺序。
InputIt
的值类型(即 typename std::iterator_traits<InputIt>::value_type )为 std::experimental::future 或 std::experimental::shared_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
就绪时变为就绪。 when_any_result
的 index
成员含有 futures 成员中就绪的 future
或 shared_future
的位置。
future
立即就绪; when_any_result
的 futures
域为空 vector
,而 index
域为 size_t(-1) 。future
立即就绪; when_any_result
的 futures
域为空 tuple
,而 index
域为 size_t(-1) 。