std::experimental:: when_all
|
Определено в заголовочном файле
<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
соответствует порядку аргументов.
InputIt
's тип значения (т.е.,
typename
std::
iterator_traits
<
InputIt
>
::
value_type
) не является
std::experimental::future
или
std::experimental::shared_future
.
Fn
в
Futures
, либо
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
содержит пустой вектор и готов немедленно.
future<std::tuple<>>
и он немедленно готов.