当前位置: 首页 > news >正文

【C++打怪之路Lv7】-- 模板初阶

🌈 个人主页:白子寰
🔥 分类专栏:C++打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)

目录

泛型编程

函数模板

函数模板概念

函数模板格式

函数模板的原理

函数模板的实例化

隐式实例化

显式实例化

模板参数的匹配原则

类模板

类模板的定义格式

类模板的实例化


泛型编程

我们之前写swap(交换两个变量),不同类型的是不是得重复写一个函数名相同、参数不同的函数【函数重载】

可是像这种泛型编程,有两种弊端

①代码复用率低

②代码维护性低

那有没有只写一个函数就能解决不同参数实现函数swap(交换)呢?




函数模板

函数模板概念

函数模板是一种代码复用机制,它允许编写与数据类型无关的函数定义,使得同一个函数可以处理多种不同类型的参数

简而言之,函数模板提供了类型参数化的能力


函数模板格式

一般推荐使用关键词class 

 在主函数中,两个函数名一样,调用这两个函数的地址相同吗?

 

根据反汇编的可以看到,它们的地址是不一样的


函数模板的原理


函数模板的实例化

隐式实例化

当函数模板被调用时,编译器会根据传递给模板的参数类型自动生成函数的特定版本

这个过程称为隐式实例化。

编译器会在需要的时候自动创建一个特定类型的函数版本


显式实例化

显式实例化是指程序员明确告诉编译器为特定的类型创建模板函数的实例

显式实例化通常用于模板代码的分离编译,或者当编译器无法自动推导模板参数时

接上面代码,我想把变量b转换为double怎么转?

有两种方式


 看看下面这个函数显式实例化的方式


模板参数的匹配原则

当一个非模板函数与一个函数模板具有相同的名字和相同的调用形式时,非模板函数将优先于模板函数被调用
如果需要调用模板函数,则可以通过显式实例化来实现。
模板实例化与非模板函数可以构成重载关系




类模板

类模板的定义格式

template <typename T>
class ClassName {// 类成员声明
public:ClassName() { /* 构造函数代码 */ }~ClassName() { /* 析构函数代码 */ }// 其他成员函数和数据成员void memberFunction(T param) {// 使用类型T的函数实现}T dataMember; // 使用类型T的数据成员// ...
};

那支持多个参数不同的类型该怎么定义? 

template <typename T1, typename T2, ...>
class ClassName {// 类成员声明
public:// ...
};

类模板的实例化

解释:

Stack构造函数传有参数 ,创建对象时要提供参数




***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“以结果为导向,主动去争取”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。

相关文章:

【C++打怪之路Lv7】-- 模板初阶

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分82)&#…...

实战OpenCV之模板匹配

基础入门 模板匹配是计算机视觉中一种常用的图像处理技术,用于在较大的目标图像中寻找与给定模板图像相似的子区域。这项技术的基本思想是在主图像中寻找与模板图像最相似的子区域,广泛应用于目标检测、图像识别等领域。模板匹配的主要流程包括如下三点。 1、滑动窗口。将模板…...

【C++ 11】for 基于范围的循环

文章目录 【 1. 基本用法 】【 2. for 新格式的应用 】2.1 for 遍历字符串2.2 for 遍历列表2.3 for 遍历的同时修改元素 问题背景 C 11标准之前&#xff08;C 98/03 标准&#xff09;&#xff0c;如果要用 for 循环语句遍历一个数组或者容器&#xff0c;只能套用如下结构&#…...

创建索引时需要考虑的关键问题详解

引言 在数据库中&#xff0c;索引是加快数据查询速度的重要工具。通过索引&#xff0c;数据库可以快速定位需要的数据&#xff0c;而无需扫描整个表的数据。尽管索引能极大提高查询效率&#xff0c;但不合理的索引设计也可能导致性能下降&#xff0c;甚至增加不必要的系统开销…...

【JavaEE】【多线程】Thread类讲解

目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用…...

硬件面试(一)

网上别人的硬件面试记录&#xff0c;察漏补缺&#xff1a; 1.骄傲容易被打脸&#xff01; 励磁电感和谐振电感的比值K大小有什么含义: 励磁电感和谐振电感的比值 KKK 通常用来衡量电路的特性。当 KKK 较大时&#xff0c;表示励磁电感相对于谐振电感较强&#xff0c;可能导致…...

9-贪心算法

PDF文档下载&#xff1a;LeetCode-贪心算法-java 参考&#xff1a;代码随想录 题目分类大纲如下&#xff1a; 贪心算法理论基础 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心的套路&#xff08;什么时候用贪心&#xff…...

前端编程艺术(3)---JavaScript

目录 1.JavaScript 1.输出 2.变量和数据类型 3.运算符 4.数组 5.函数 6.面向对象 7.ES6面向对象 2.BOM 1.document对象 3.DOM 4.JSON 1.JavaScript JavaScript是一种脚本编程语言&#xff0c;通常用于为网页增加交互性和动态效果。它是一种高级语言&#xff…...

动态规划算法题目练习——91.解码方法

1.题目解析 题目来源&#xff1a;91.解码方法——力扣 测试用例 2.算法原理 基础版本 1.状态表示 由于题目只要求返回第i个位置的可能情况&#xff0c;则只需要开辟n(ns.size())个大小的dp表即可 2.状态转移方程 题目可知第i个位置可以单独解码也可以与前一个位置组合解码&am…...

每天一个数据分析题(四百九十二)- 主成分分析与因子分析

在因子分析中&#xff0c;因子载荷矩阵是用来表示&#xff08; &#xff09;。 A. 变量和因子之间的关系 B. 样本和因子之间的关系 C. 变量和样本之间的关系 D. 因子和因子之间的关系 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案…...

Linux shell编程学习笔记86:sensors命令——硬件体温计

0 引言 同事们使用的Windows系统电脑&#xff0c;经常莫名其妙地装上了鲁大师&#xff0c;鲁大师的一项功能是显示系统cpu等硬件的温度。 在Linux系统中&#xff0c;sensors命令可以提供类似的功能。 1 sensors命令 的安装和配置 1.1 sensors命令 的安装 要使用sensors命…...

基于SSM车位租赁系统【附源码】

基于SSM车位租赁系统 效果如下&#xff1a; 注册页面 首页展示 车位租赁订单展示 车位列表页面 公告信息管理页面 公告类型管理界面 研究背景 随着经济的持续增长和城市化进程的加速&#xff0c;土地资源变得日益紧缺&#xff0c;停车难问题已成为许多城市面临的共同挑战。随…...

JAVA开源项目 新生报到网站 计算机毕业设计

本文项目编号 T 002 &#xff0c;文末自助获取源码 \color{red}{T002&#xff0c;文末自助获取源码} T002&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 提…...

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …...

修改银河麒麟操作系统V10(SP1)网卡名称为ethx

修改银河麒麟桌面操作系统V10&#xff08;SP1&#xff09;网卡名称为ethx 步骤一&#xff1a;查看当前网卡信息步骤二&#xff1a;修改GRUB配置文件步骤三&#xff1a;更新GRUB配置步骤四&#xff1a;编辑网络接口文件步骤五&#xff1a;重启机器 &#x1f496;The Begin&#…...

MySQL多表查询:标量子查询

先看我的emp表结构 emp表 子查询基本语法 select * from t1 where column1 (select column1 from t2);例子1&#xff1a;查询"销售部" 的所有员工信息 这个可以先拆解为两个 a.查询"销售部"的部门ID select id from dept where name 销售部; b. 根…...

C++学习笔记----8、掌握类与对象(六)---- 操作符重载(1)

经常在对象上执行如相加&#xff0c;比较&#xff0c;文件传输等操作。例如&#xff0c;spreadsheet只有在可以在上面执行自述运算才有用&#xff0c;比如对整行的单元格求和。所有这些都可以通过重载操作符来完成。 许多人发现操作符重载的语法复杂而令人迷惑。至少一开始是这…...

Ascend C 自定义算子开发:高效的算子实现

Ascend C 自定义算子开发&#xff1a;高效的算子实现 在 Ascend C 平台上&#xff0c;开发自定义算子能够充分发挥硬件的性能优势&#xff0c;帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例&#xff0c;介绍 Ascend C 中自定义算子的开发流程及关键技术…...

面向对象技术——设计模式

目录 层次结构 具体设计模式分类 创建型模式&#xff08;处理创建对象&#xff09; 结构型模式&#xff08;处理类和对象的组合&#xff09; 行为型模式&#xff08;描述类或者对象的交互行为&#xff09; 创建型设计模式 ​编辑 结构型设计模式 行为型设计模式​编辑 …...

2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...