当前位置: 首页 > 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——…...

ElevenLabs瑞典文语音生成延迟超800ms?独家逆向分析其WebRTC音频缓冲机制,给出3行代码级低延迟注入方案

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs瑞典文语音生成延迟超800ms&#xff1f;独家逆向分析其WebRTC音频缓冲机制&#xff0c;给出3行代码级低延迟注入方案 ElevenLabs 在瑞典语&#xff08;sv-SE&#xff09;TTS 服务中默认启用高保真音…...

UWB传统厘米级定位 VS 镜像视界AI无感定位|大模型融合视频孪生全面重塑全域空间感知

UWB传统厘米级定位 VS 镜像视界AI无感定位&#xff5c;大模型融合视频孪生全面重塑全域空间感知在全域空间高精度感知产业高速迭代进程中&#xff0c;室内外人员与目标定位技术逐步分化为两大主流发展路径&#xff0c;其一为深耕多年、依托硬件组网实现测距定位的传统UWB厘米级…...

ElevenLabs越南文TTS落地全链路:从API密钥配置、SSML控制到本地化韵律校准(含实测MOS评分对比)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs越南文TTS落地全链路概览 ElevenLabs 作为当前高保真语音合成领域的领先平台&#xff0c;其对越南语&#xff08;vi-VN&#xff09;的支持已进入生产就绪阶段。尽管官方文档未单独设立越南语专区&a…...

DistroAV(原OBS-NDI)完整使用指南:NDI技术在OBS中的高效应用

DistroAV&#xff08;原OBS-NDI&#xff09;完整使用指南&#xff1a;NDI技术在OBS中的高效应用 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi DistroAV&#xff08;原名…...

Camunda流程版本管理避坑指南:从Version Tag查询到迁移验证,这些细节决定成败

Camunda流程版本管理实战精要&#xff1a;从精准查询到安全迁移的全链路策略 在企业级流程自动化领域&#xff0c;Camunda作为领先的工作流引擎&#xff0c;其版本管理机制直接影响着业务系统的稳定性和迭代效率。本文将深入剖析版本管理的核心痛点&#xff0c;提供一套覆盖全…...

Miniconda虚拟环境配置踩坑实录:从‘CondaHTTPError’到完美隔离环境

Miniconda虚拟环境配置踩坑实录&#xff1a;从‘CondaHTTPError’到完美隔离环境 第一次在终端输入conda create -n myenv python3.8时&#xff0c;满心期待能快速搭建起一个干净的Python工作环境。然而几秒钟后&#xff0c;屏幕上突然跳出的红色报错信息让整个流程戛然而止&a…...

5个关键步骤:让你的Windows视频播放体验达到专业级水准

5个关键步骤&#xff1a;让你的Windows视频播放体验达到专业级水准 【免费下载链接】VideoRenderer Внешний видео-рендерер 项目地址: https://gitcode.com/gh_mirrors/vi/VideoRenderer 你是否曾经在Windows上观看高质量视频时&#xff0c;感觉画…...

【大语言模型系列·第 01 篇】全景图:从图灵测试到万亿参数的 AI 革命

【大语言模型系列第 01 篇】全景图&#xff1a;从图灵测试到万亿参数的 AI 革命 系列前言&#xff1a;大语言模型&#xff08;LLM&#xff09;是当今 AI 最重要的技术基石。从 2017 年 Transformer 论文到 2026 年的万亿参数 MoE 模型&#xff0c;LLM 用不到十年时间重塑了整个…...

【实测可用 v 2.7.5】Open Claw 本地环境快速部署搭建攻略

✨ 核心亮点 零代码门槛&#xff5c;全程可视化&#xff5c;无需手动配环境&#xff5c;内置所有依赖 &#x1f517; 下载地址 https://xiake.yun/api/download/package/16?promoCodeIV8E496E2F7A &#x1f4dd; 前言 2026 年开源圈热门的「数字员工」OpenClaw&#xff08…...

如何通过智能包装系统提升全链条的数字化与协同效率?

本段聚焦全链条数字化升级的核心路径&#xff0c;通过 智能包装系统实现 原材料到成品的数据共享与流程对齐。以原材料入库、生产、成品出库为主线&#xff0c;建立统一的数据模型、模块化接口与可追溯闭环&#xff0c;推动 协同优化与成本控制。结合 中科天工智能包装设备与 中…...