C++ 为什么std::when_any使用std::tuple而不是std::vector作为其结果类型?
引自C++ 为什么std::when_any使用std::tuple而不是std::vector作为其结果类型?,c++,multithreading,concurrency,standards,C++,Multithreading,Concurrency,Standards,引自 std::当任何定义如下: template<class Sequence> struct when_any_result { std::size_t index; Sequence futures; }; template<class InputIt> auto when_any(InputIt first, InputIt last) -> future<when_any_result<std::vector&l
std::当任何
定义如下:
template<class Sequence>
struct when_any_result
{
std::size_t index;
Sequence futures;
};
template<class InputIt>
auto when_any(InputIt first, InputIt last)
-> future<when_any_result<std::vector<
typename std::iterator_traits<InputIt>::value_type>>>;
template<class... Futures>
auto when_any(Futures&&... futures)
-> future<when_any_result<std::tuple<std::decay_t<Futures>...>>>;
模板
任何结果时的结构
{
标准:尺寸指数;
序列期货;
};
模板
任意时自动(先输入,后输入)
->未来>;
模板
任何情况下自动(期货&…期货)
->未来;
让我困惑的是,为什么最后一个表单不使用std::vector
作为其结果类型
结果包含一个索引
字段,可用于检索准备就绪的未来。对我来说,std::tuple
很难在运行时通过index
进行迭代,但是std::vector
很容易做到
这种设计背后有什么基本原理吗?这个
先输入,后输入是一个迭代器范围。它定义了一系列相同类型元素的输入范围
这个期货&&。。。期货
是一个可变模板。它定义了一系列可能不同类型的参数
这两种方法都将其输入值限制在某种形式的未来,但后一种方法可以采用不同类型的期货,从而产生不同类型的价值。向量是一个同质容器;它不能表示不同类型的值(除非它是一个向量,但这只会使它的使用变得繁琐和低效)。“这种设计背后有什么理由吗?”-很可能是的。在没有理由的情况下,很难将其纳入标准。