类模板中可变参的逐步展开
myclasst<Args...>继承
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args...>
{
public:
myclasst2()
{
cout << "myclasst2::myclasst2()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
myclasst2<double, float, int> tmpobj;
- 会实例化出:myclasst2<double, float, int>,还会实例化出myclasst<double, float, int>。
- 实例化后,myclasst<Args...> 代表的是一个类:myclasst<double,float,int>
- 输出
![](https://i-blog.csdnimg.cn/blog_migrate/b40dbf3db2d2eda6fa4bc7e23247e10b.png)
myclasst<Args>...继承
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args>...
{
public:
myclasst2()
{
cout << "myclasst2::myclasst2()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
myclasst2<double, float, int> tmpobj;
- 会实例化出:myclasst2<double, float, int>,还会实例化出myclasst<double>、myclasst<float>、myclasst<int>
- myclasst<Args>... 代表的是三个类,分别是myclasst<double>、myclasst<float>、myclasst<int>
- class myclasst2 :public myclasst<double>,pubic myclasst<float>,pubic myclasst<int>
- 输出
![](https://i-blog.csdnimg.cn/blog_migrate/03faf7899be02ec9d74caf9f30354577.png)
myclasst<Args,char>...继承
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 << "myclasst2::myclasst2()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
myclasst2<double, float, int> tmpobj;
- 会实例化出:myclasst2<double, float, int>,还会实例化出myclasst<double, char>、myclasst<float, char>、myclasst<int, char>。
- 实例化后,myclasst<Args,char>... 代表的是三个类,分别是myclasst<double,char>、myclasst<float,char>、myclasst<int,char>。
- 输出
![](https://i-blog.csdnimg.cn/blog_migrate/8d747589538ce53576f11bc0ff244844.png)
myclasst<Args,Args...>...继承
template<typename... Args>
class myclasst
{
public:
myclasst()
{
cout << "myclasst::myclasst()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
template<typename... Args>
class myclasst2 :public myclasst<Args, Args...>...
{
public:
myclasst2()
{
cout << "myclasst2::myclasst2()执行了,可变参个数=" << sizeof...(Args) << endl;
}
};
myclasst2<double, float, int> tmpobj;
- 会实例化出:myclasst2<double, float, int>,还会实例化myclasst<double, double, float, int>、myclasst<float, double, float, int>、myclasst<int, double, float, int>
- Args...代表的是double, float, int
- 实例化后,myclasst<Args, Args...>... 代表的是三个类,分别是myclasst<double, double, float, int>、myclasst<float, double, float, int>、myclasst<int, double, float, int>
- 输出
![](https://i-blog.csdnimg.cn/blog_migrate/2276af447477c3e2cd6b2814a8084522.png)