Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么std::when_any使用std::tuple而不是std::vector作为其结果类型?_C++_Multithreading_Concurrency_Standards - Fatal编程技术网

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
很容易做到


这种设计背后有什么基本原理吗?

这个
先输入,后输入是一个迭代器范围。它定义了一系列相同类型元素的输入范围

这个
期货&&。。。期货
是一个可变模板。它定义了一系列可能不同类型的参数


这两种方法都将其输入值限制在某种形式的未来,但后一种方法可以采用不同类型的期货,从而产生不同类型的价值。向量是一个同质容器;它不能表示不同类型的值(除非它是一个
向量,但这只会使它的使用变得繁琐和低效)。

“这种设计背后有什么理由吗?”-很可能是的。在没有理由的情况下,很难将其纳入标准。