可变参数模板递归构造函数问题

布赖恩·马丁

我尝试了解可变参数模板与递归构造函数的使用。

在下面的代码中,我想使用可变参数传递的值来实现递归构造函数。

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
}
最高66

您还必须继承 Tuple<T2...>

template <class T, class... T2>
struct Tuple : public Tuple<T2...>

并在初始化列表中初始化继承的类(之前value)[未测试警告代码]

   Tuple(T n, T2... re) : Tuple<T2...>{re...}, value{n}
    { }

您还需要专一性案例来停止递归

template <class T>
struct Tuple<T>
 {
   T value;

   Tuple (T n) : value{n}
    { }
 }; 

或者(可能更简单)

template <>
struct Tuple<>
 { }; 

但是对于第二种解决方案,您必须将其定义Tuple为接收零个或多个类型。也许如下

template <typename...>
struct Tuple
 { };

template <class T, class... T2>
struct Tuple<T, T2...> : public Tuple<T2...>
 {
   // ...
 };

这样,当Tuple接收至少一种类型时,选择专业化;当收到零类型时,仅主版本匹配并用作基本案例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

递归可变参数函数模板

编写可变参数模板构造函数

具有编译问题的简单(递归)可变参数模板“ accumulate_for”函数

递归可变参数函数模板的返回类型的decltype

递归可变参数模板函数-不明确吗?

如何编写可变参数模板的递归函数?

N维向量的递归可变参数模板函数

将递归可变参数模板函数转换为迭代

可变参数模板构造函数优先级

通过可变参数模板的C ++ 11构造函数继承

限制可变参数模板类中的构造函数访问

可变参数模板问题

c ++ 11递归可变参数模板

可变参数模板循环,非递归

可变参数模板的递归继承

递归可变参数模板如何工作?

可变参数模板-递归函数-最后一个可变参数成员

从可变参数模板构造类

为每个可变参数模板参数调用函数,并将结果作为构造函数参数传递

通过转发构造函数参数,基于可变参数模板构造一个mixin

我的可变参数模板构造函数隐藏了复制构造函数,防止类被复制

值包装器的可变参数模板构造函数的类构造函数优先级

为什么可变参数模板构造函数比复制构造函数更好地匹配?

C ++可变参数模板构造函数和通用构造函数

带有可变参数模板构造函数的推导指南和可变参数类模板-参数包长度不匹配

从具有可变参数模板构造函数的类型构造 std::function 对象

g ++可变参数模板问题

具有多个参数包的可变参数模板构造函数

具有相同类型的可变参数模板参数的构造函数无法编译