C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 并行扩展
- 并行扩展,版本 2
- std::experimental::sample
- std::experimental::to_array
- std::experimental::source_location
- std::experimental::not_fn
- std::experimental::future
- std::experimental::shared_future
- C++ 标准库扩展
- std::experimental::pmr::resource_adaptor
- std::experimental::invocation_type, std::experimental::raw_invocation_type
- C++ 标准库扩展,版本 2
- std::experimental::propagate_const
- std::experimental::ostream_joiner
- std::experimental::randint
- std::experimental::observer_ptr
- std::experimental::is_detected, std::experimental::detected_t, std::experimental::detected_or
- C++ 标准库扩展,版本 3
- std::experimental::scope_exit
- std::experimental::scope_fail
- std::experimental::scope_success
- std::experimental::unique_resource
- 并发扩展
- 制约与概念
- 范围扩展
- std::experimental::function
- std::experimental::nonesuch
- std::experimental::reseed
- std::experimental::shuffle
- std::experimental::when_all
- std::experimental::barrier
- std::experimental::latch
- std::experimental::make_array
- 数学特殊函数
- 文件系统库
- std::experimental::erased_type
- std::experimental::when_any
- std::experimental::make_ready_future
- std::experimental::make_exceptional_future
- std::experimental::flex_barrier
- 注释
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
位置:首页 > C++ 参考手册 >实验性 C++ 特性 > std::experimental::when_all
std::experimental::when_all
定义于头文件 <experimental/future>
|
||
template < class InputIt > auto when_all(InputIt first, InputIt last) |
(1) | (并发 TS) |
template < class... Futures > auto when_all(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>...> 。此函数模板创建含 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<>>
且立即就绪。