类模板可变参的逐步展开
myclasst<Args…>继承
namespace nmsp1 {
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参数个数= " <<sizeof...(Args)<< endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args...>
{
public:
myclasst2()
{
cout << "myclasst::myclasst2()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
}
nmsp1::myclasst2<double, float, int> tmpobj;
//myclasst::myclasst()执行了,可变参数个数 = 3
// myclasst::myclasst2()执行了,可变参数个数 = 3
//会实例化出myclasst2<double,float,int>,还会实例化出myclasst<double,float,int>
myclasst…继承
namespace nmsp2 {
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args>...
{
public:
myclasst2()
{
cout << "myclasst::myclasst2()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
}
nmsp2::myclasst2<double, float, int> tmpobj;
//myclasst::myclasst()执行了,可变参数个数= 1
//myclasst::myclasst()执行了,可变参数个数= 1
//myclasst::myclasst()执行了,可变参数个数= 1
//myclasst::myclasst2()执行了,可变参数个数= 3
//myclasst实例化后,代表的是三个类,分别是myclasst<double>、myclasst<float>、mycalsst<int>
mycalss<Args,char>…继承
namespace nmsp2 {
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args,char>...
{
public:
myclasst2()
{
cout << "myclasst::myclasst2()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
}
nmsp3::myclasst2<double, float, int> tmpobj;//实例化也四个类
// myclasst::myclasst()执行了,可变参数个数= 2
// myclasst::myclasst()执行了,可变参数个数= 2
// myclasst::myclasst()执行了,可变参数个数= 2
// myclasst::myclasst2()执行了,可变参数个数= 3
//myclasst实例化后,代表的是三个类,分别是myclasst<double,char>、myclasst<float,char>、mycalsst<int,char>
myclasst<Args,Args…>…继承
namespace nmsp4 {
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args,Args...>...//Args...代表一包参数
{
public:
myclasst2()
{
cout << "myclasst::myclasst2()执行了,可变参数个数= " << sizeof...(Args) << endl;
}
};
}
nmsp4::myclasst2<double, float, int> tmpobj;
// myclasst::myclasst()执行了,可变参数个数= 4
// myclasst::myclasst()执行了,可变参数个数= 4
// myclasst::myclasst()执行了,可变参数个数= 4
// myclasst::myclasst2()执行了,可变参数个数= 3
//myclasst<double,double,float,int>,myclasst<float,double,float,int>
//myclasst<int,double,float,int>