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
无效,则行为未定义。
特别地,对于 (1),设 Sequence
为 std::vector<typename std::iterator_traits<InputIt>::value_type>;对于 (2),设 Sequence
为 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)。