一、基类参数包的展开
1.1基类参数包的展开
C + + C++ C++是一个支持多继承的语言,因此继承的类也可以是一个基类的参数包
注意继承的语法是 p u b l i c : c l a s s . . . public: class ... public:class...,需要补充 . . . ... ...作为基类参数包的标志。
对于基类参数的展开,一般是通过在构造函数中递归展开的,与递归组合的展开方式类似。
核心点是在构造函数上:
例如,下面的代码,我们的派生类继承了三个基类:
//基类参数包的展开
template<typename... myclassPList>
class myclasst :public myclassPList...{ //相当于多继承
public:
myclasst() :myclassPList()...{
std::cout << "myclasst::myclasst,this = " << this << "\n";
}
};
//第一个基类
class PA1 {
public:
PA1() {
std::cout << "PA1::PA1,this = " << this << "\n";
}
private:
char m_s1[100];
};
//第二个基类
class PA2 {
public:
PA2() {
std::cout << "PA2::PA2,this = " << this << "\n";
}
private:
char m_s1[200];
};
//第二个基类
class PA3 {
public:
PA3() {
std::cout << "PA3::PA3,this = " << this << "\n";
}
private:
char m_s1[300];
};
void Test() {
myclasst<PA1, PA2, PA3>obj; //继承三个基类的对象
std::cout << "sizeof(obj) = " << sizeof(obj) << "\n";
}
我们调用测试代码,得到:
这里派生类的
t
h
i
s
this
this指针和第一个继承的基类相同,并且继承之后派生类的大小为自己的大小与所有基类的大小之和。
关于多继承的细节不是泛型与模板的重点,因此这里只需要了解一下即可。