C++ 可变模板递归构造函数问题
我试图理解递归构造函数与可变模板的用法 在下面的代码中,我想用可变传递值实现一个递归构造函数C++ 可变模板递归构造函数问题,c++,templates,variadic,C++,Templates,Variadic,我试图理解递归构造函数与可变模板的用法 在下面的代码中,我想用可变传递值实现一个递归构造函数 template <class T, class... T2> struct Tuple{ T value; Tuple(T n){ //constructor if only one value left value = n; } Tuple(T n, T
template <class T, class... T2>
struct Tuple{
T value;
Tuple(T n){ //constructor if only one value left
value = n;
}
Tuple(T n, T2... re){ //constructor if more than one value left
T value = n;
//Tuple(rest...); doesnt work for me
}
};
int main(){
Tuple<int, float, int> t(2, 1.2, 9);
std::cout << t.value << "\n"; //2
std::cout << t.rest.value << "\n"; //1.2
std::cout << t.rest.rest.value << "\n"; //9
}
模板
结构元组{
T值;
元组(tn){//构造函数,如果只剩下一个值
值=n;
}
元组(tn,T2…re){//如果剩下多个值
T值=n;
//元组(rest…;对我不起作用
}
};
int main(){
元组t(2,1.2,9);
std::cout您还必须从元组继承
您还需要一个基本案例专门化来停止递归
像
template <class T>
struct Tuple<T>
{
T value;
Tuple (T n) : value{n}
{ }
};
这样,当Tuple
接收至少一种类型时,将选择专门化;当接收零类型时,只有主版本匹配并用作基本情况。您还必须从Tuple
继承
您还需要一个基本案例专门化来停止递归
像
template <class T>
struct Tuple<T>
{
T value;
Tuple (T n) : value{n}
{ }
};
这样,当Tuple
接收至少一种类型时,选择专门化;当接收零类型时,只有主版本匹配并用作基本情况
template <class T>
struct Tuple<T>
{
T value;
Tuple (T n) : value{n}
{ }
};
template <>
struct Tuple<>
{ };
template <typename...>
struct Tuple
{ };
template <class T, class... T2>
struct Tuple<T, T2...> : public Tuple<T2...>
{
// ...
};