Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++ 可变模板递归构造函数问题_C++_Templates_Variadic - Fatal编程技术网

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...>
 {
   // ...
 };