使用std :: tuple构造基于矢量的数据集,请参考variadic-templates

时间:2016-04-25 06:42:47

标签: c++ templates c++11

我想制作如下的课程模板:

template < typename... Args > class VectorTuple;

例如,

VectorTuple < long, double, string >

将实例化为

Tuple < vector < long >, vector < double > , vector < string > >

我对variadic-templates不熟悉。最糟糕的方法是从&lt;复制代码中复制代码。元组&gt;并修改它。有没有一种简单的方法可以直接使用std :: tuple来定义我的VectorTuple。

2 个答案:

答案 0 :(得分:6)

如果您正在寻找typedef variadic-templates类型,那么

template<typename... Args>
using VectorTuple = std::tuple<std::vector<Args>...>;

现在您可以像

一样使用它
VectorTuple<long, double, std::string> obj;

答案 1 :(得分:3)

您可以使用参数包扩展将可变参数模板参数包T...转换为std::vector<T1>,...,std::vector<Tn>。然后,使用template<...> using定义模板别名。

#include <vector>
#include <tuple>

template<typename... Ts> using VT = std::tuple< std::vector<Ts>... >;    

void foo()
{
    VT<int, float, double> x;
    std::tuple< std::vector<int>, std::vector<float>, std::vector<double>> y = x;
}