我想制作如下的课程模板:
template < typename... Args > class VectorTuple;
例如,
VectorTuple < long, double, string >
将实例化为
Tuple < vector < long >, vector < double > , vector < string > >
我对variadic-templates不熟悉。最糟糕的方法是从&lt;复制代码中复制代码。元组&gt;并修改它。有没有一种简单的方法可以直接使用std :: tuple来定义我的VectorTuple。
答案 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;
}