首页 > 其他分享 >【可变参模板】基类参数包的展开

【可变参模板】基类参数包的展开

时间:2024-09-13 10:55:47浏览次数:3  
标签:std ... cout 继承 基类 可变 public 模板

一、基类参数包的展开

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指针和第一个继承的基类相同,并且继承之后派生类的大小为自己的大小与所有基类的大小之和。

关于多继承的细节不是泛型与模板的重点,因此这里只需要了解一下即可。

标签:std,...,cout,继承,基类,可变,public,模板
From: https://blog.csdn.net/Antonio915/article/details/142188364

相关文章

  • 【可变参模板】可变参类模板
    可变参类模板也和可变参函数模板一样,允许模板定义含有0到多个(任意个)模板参数。可变参类模板参数包的展开方式有多种,以下介绍几种常见的方法。一、递归继承展开1.1类型模板参数包的展开首先先看下面的代码://类型模板展开//泛化版本template<typename...Args>classmy......
  • PbootCMS模板安全设置与加固方法
    为了确保PbootCMS模板的安全性和稳定性,可以采取一系列的安全设置与加固措施。下面是一些具体的步骤和建议:1.权限设置目录权限:调整关键目录的权限,防止未经授权的写入操作。/apps:禁止写入权限(chmod0555)/config:允许读写权限(chmod0777)/core:禁止写入权限(chmod0555)......
  • PbootCms模板搭建网站,可能会遇到内页无法正常访问的情况
    当你遇到PbootCMS内页无法正常访问的问题时,关闭伪静态并转为兼容模式是一种简单有效的解决方案。以下是详细的步骤:步骤详解登录后台管理系统打开你的PbootCMS网站后台管理系统。使用管理员账号登录。进入设置页面在后台管理系统的左侧导航栏中找到“设置”选项,并点击......
  • PbootCMS模板发布文章显示的默认作者如何修改?
    PbootCMS模板中默认作者的修改可以通过以下步骤完成:1.修改默认作者名称登录后台:登录PbootCMS后台管理界面。点击右上角的作者名称:在后台右上角,点击当前显示的作者名称(如“格展网络”)。进入密码修改页面:在弹出的菜单中选择“密码修改”。修改作者名称:......
  • PbootCMS网站模板如何做好防护
    为了保护PbootCMS网站模板免受攻击和未经授权的访问,可以采取一系列措施来增强其安全性。以下是根据提供的信息整理的一些推荐做法:1.更改敏感文件夹名称更改data文件夹名称:将 data 文件夹重命名,例如改为 mubanbaba@data。修改 config/database.php 文件中相应的地......
  • PbootCMS模板禁止数字id方式访问栏目,如/1/
    在PbootCMS中,如果你希望禁止用户通过直接输入数字ID的方式访问栏目,比如通过URL /1/ 进行访问,可以采取以下几种策略来实现这一目标:1.修改URL规则1.1重写规则配置.htaccess文件:编辑网站根目录下的 .htaccess 文件,增加或修改URL重写规则,使得所有数字ID的访......
  • PbootCMS模板自动清理runtime缓存
    runtime目录的作用runtime 目录位于PbootCMS的安装目录下,主要用于存储系统运行时产生的临时文件和缓存文件。这些文件包括但不限于:缓存文件日志文件临时文件随着时间的推移,runtime 目录中的文件会逐渐增多,占用大量磁盘空间。当文件过多时,会造成系统性能下降,甚至出现一......
  • Pbootcms模板留言“提交成功”的提示语修改
    如果你想要修改PbootCMS模板中留言提交成功后的提示语,可以通过编辑相关控制器文件来实现。具体步骤如下:定位文件:找到 apps/home/controller/MessageController.php 文件。修改提示语:在该文件中找到处理留言提交成功的逻辑,并修改相应的提示语。具体步骤1.定位......
  • [模板题] - 208. 实现 Trie (前缀树)
    题目链接208.实现Trie(前缀树)思路模板题-Trie树题解链接官方题解关键点无时间复杂度\(O(\sum_{i}\#\text{word}_{i})\)空间复杂度\(O(\sum_{i}\#\text{word}_{i})\)代码实现:classTrie:def__init__(self):self.children=[N......
  • 魔怔模板
    线段树structsegmenttree{ structnode{ intl,r; longlongsum,tag;} T[maxn*4]; longlongrepair(intp,longlongk){ returnT[p].tag+=k,T[p].sum+=k*(T[p].r-T[p].l+1);} voiddowndata(intp){ repair(2*p,T[p].tag),repair(2*p+......