0.简介
前一篇介绍了模板的可变参数在函数的用法,这次来研究一下在类中的用法。
1.tuple
在STL中有tuple,其可以包含多种不同类型的变量用法如下。
tuple<int> a;
tuple<int,float> b;
tuple<int,float,double> c;
上面的用法和上一篇的print函数中的参数很类似,所以我分析tuple里面也用到了类似的原理,所以我们自己简要实现一下。
2.mytuple
显然下面的代码是不能达到目的的。
template<typename T,typename... A>
class mytuple
{
public:
};
为了能实现类似print(int,float,double)的类似效果,那么类也需要实现某种递归,这里需要的就是继承递归,然后T成为一个被每层递归分离出来的变量。
template<typename T,typename... A>
class mytuple :public mytuple<A...>
{
T data;
public:
};
到了最后一层递归的时候,A中为空包,所以还需要一个空的mytuple类。因为是要继承mytuple<A...>所以要先声明出对应的模板,然后仿照print的方法写出空和分离变量的类即可。
template<typename... A>
class mytuple;
template<>
class mytuple<>
{
public:
};
template<typename T,typename... A>
class mytuple<T,A...> :public mytuple<A...>
{
T data;
public:
mytuple() {}
};