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
就绪时,该future将变为就绪状态。
when_any_result
的
index
成员包含就绪的
future
或
shared_future
在
futures
成员中的位置。
future
会立即就绪;
when_any_result
的
futures
字段是一个空向量,
index
字段为
size_t
(
-
1
)
。
future
将立即就绪;
when_any_result
的
futures
字段为空元组,且
index
字段值为
size_t
(
-
1
)
。