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

【C++打怪之路Lv12】-- 模板进阶

#1024程序员节|征文#

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

目录

 模板参数

模板的特化

概念

函数模板的特化 

 使用场景

注意事项

类模板特化

全特化

偏特化

模板分离编译


 模板参数



模板的特化

概念

模板特化是为模板提供一个特殊版本,这个版本仅适用于特定的模板参数

函数模板的特化 

例如,一个通用的模板函数可能有一个专门为int类型定制的特化版本 

template<class T>
void fun(T t)
{cout << "通用版本" << endl;
}template<>
void fun<int>(int t)
{cout << "特化版本" << endl;
}int main()
{fun(1);			// 特化版本fun<int>(6);	// 特化版本fun(6.8);		// 通用版本return 0;
}

 使用场景

1、当某个特定类型需要不同的处理逻辑时。
2、优化:为特定类型提供更高效的算法


注意事项

1、特化版本不能独立于原始模板存在。
2、不能有多个相同的特化版本



类模板特化

全特化

1、定义:全特化是指为类模板的所有模板参数提供具体的类型

2、为什么要使用全特化:当需要对某个特定类型组合提供专门的实现,以优化性能或处理特定逻辑时,使用全特化


偏特化

1、定义:偏特化是指为类模板的部分模板参数提供具体的类型

2、为什么要用偏特化当只需要对模板参数的某部分进行特化,而不是全部参数时,使用偏特化



模板分离编译

在分离编译模式下一个程序由多个源文件分别编译成目标文件后再链接为可执行文件

而对于模板,它可以在同一文件中实现声明和定义分离,但如果将模板的声明和定义放在不同文件中,会由于模板的特殊实现机制在链接阶段出现链接错误。

这是因为模板的实例化需要在使用模板的地方进行,而不同文件编译时可能无法正确识别和处理模板的实例化需求

在 C++ 程序运行过程中,通常经历预处理、编译、汇编和链接等步骤。

分离编译时,普通函数在编译阶段会生成地址和汇编代码,链接阶段可通过该地址调用函数。

然而对于模板,在未实例化之前,编译器不会生成具体函数及对应的地址。所以在链接阶段,若模板的声明和定义分别在不同文件,由于找不到具体函数地址就会发生链接错误。

因此,若要进行模板的分离编译,必须将模板的声明和定义放在同一个文件中,以确保在需要实例化时能够正确生成函数并被链接器正确处理 




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

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

“要么被爱唤醒,要么被痛唤醒。”。

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

相关文章:

【C++打怪之路Lv12】-- 模板进阶

#1024程序员节&#xff5c;征文# &#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您…...

第23周Java主流框架入门-SpringMVC 2.RESTful开发风格

课程笔记&#xff1a;RESTful 开发风格 课程介绍 本节课程介绍 RESTful 开发风格&#xff0c;以及如何在 Spring MVC 中应用这种开发模式。传统 MVC 开发通过 Servlet、JSP 和 Java Bean 实现前后端交互&#xff0c;而 RESTful 开发提供了一种新的理念&#xff0c;更适合现代…...

QT枚举类型转字符串和使用QDebug<<重载输出私有枚举类型

一 将QT自带的枚举类型转换为QString 需要的头文件&#xff1a; #include <QMetaObject> #include <QMetaEnum> 测试代码 const QMetaObject *metaObject &QImage::staticMetaObject;QMetaEnum metaEnum metaObject->enumerator(metaObject->indexOf…...

手机柔性屏全贴合视觉应用

在高科技日新月异的今天&#xff0c;手机柔性显示屏作为智能手机市场的新宠&#xff0c;以其独特的可弯曲、轻薄及高耐用性特性引领着行业潮流。然而&#xff0c;在利用贴合机加工这些先进显示屏的过程中&#xff0c;仍面临着诸多技术挑战。其中&#xff0c;高精度对位、应力控…...

《Python游戏编程入门》注-第3章3

《Python游戏编程入门》的“3.2.4 Mad Lib”中介绍了一个名为“Mad Lib”游戏的编写方法。 1 游戏玩法 “Mad Lib”游戏由玩家根据提示输入一些信息&#xff0c;例如男人姓名、女人姓名、喜欢的食物以及太空船的名字等。游戏根据玩家输入的信息编写出一个故事&#xff0c;如图…...

Netty-TCP服务端粘包、拆包问题(两种格式)

前言 最近公司搞了个小业务&#xff0c;需要使用TCP协议&#xff0c;我这边负责服务端。客户端是某个设备&#xff0c;客户端传参格式、包头包尾等都是固定的&#xff0c;不可改变&#xff0c;而且还有个蓝牙传感器&#xff0c;透传数据到这个设备&#xff0c;然后通过这个设备…...

centos安装指定版本的jenkins

打开jenkins镜像包官网&#xff0c;找到自己想要安装的版本&#xff0c;官网地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable 下载指定版本安装包&#xff1a; wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.452.…...

QT 周期性的杀死一个进程(软件),一分钟后自动退出

1.原因&#xff1a;某软件开机自启动很烦&#xff0c;搞一个程序干掉这个自启动的软件 2.QT代码 main.cpp #include "KillXXX.h" #include <QtWidgets/QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);KillXXX k;return a.exec…...

MySQL任意版本安装卸载和数据库原理图绘制

MYSQL任意版本安装和卸载 安装&#xff1a; 1、解压文件 --- 不能出现中文路径 2、在解压目录&#xff08;安装目录&#xff09;下&#xff1a; 1>.创建data文件夹 2>.创建配置文件my.txt 然后修改成ini格式 3、修改配置文件 basedirD:\\mysql\\mysql-5.7.28-winx64…...

技术成神之路:设计模式(二十三)解释器模式

相关文章&#xff1a;技术成神之路&#xff1a;二十三种设计模式(导航页) 介绍 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;用于定义一种语言的文法表示&#xff0c;并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达…...

2024软考《软件设计师》-Python专题知识(含历年真题解析)

自2020年之后&#xff0c;软考软件设计师考试在综合知识部分开始增加Python编程语言相关考点&#xff0c;每年会考2~3分的样子。本文将结合近几年常考的内容&#xff0c;扩展一下Pyhton的基础知识&#xff01;考前看一看&#xff0c;或许有所帮助。 一、基础语法 标识符 第一…...

基于大数据 Python+Vue 旅游推荐可视化系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 会持续一直更新下去 有问必答 一键收藏关注不迷路 源码获取&#xff1a;https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwdjf1d 提取码: jf1d &#…...

使用虚拟机搭建环境:CentOS7 Docker、MySQL、Redis 安装与配置

创作灵感 项目实践总结&#xff1a;记录了在虚拟机中安装与配置CentOS7环境下的Docker、MySQL、Redis的全过程&#xff0c;帮助理解和应用各项技术。技术笔记与问题总结&#xff1a;详细梳理了每一步安装的关键点与常见问题&#xff0c;并给出了解决方案。职业感悟与心得&…...

[分享] Docker容器可视化管理工具 - WGCLOUD

WGCLOUD是新一代运维监测平台&#xff0c;它可以监控Docker容器的各种性能数据&#xff0c;比如内存&#xff0c;cpu&#xff0c;Image&#xff0c;运行时间&#xff0c;运行状态&#xff0c;端口映射等信息 WGCLOUD也支持在页面启动&#xff0c;重启&#xff0c;停止Docker容…...

保存网页中 canvas 的内容

在开发人员工具中,保存网页中 canvas 的内容,可以用这个方法: 1. 在 dom 中创建一个下载按钮 <button id="save">保存</button>2. 控制台中运行: const gCanvas = document.querySelector(#page_1);function onSave() {gCanvas.toBlob((blob) =&g…...

PID控制原理

PID控制原理 PID控制器是一种经典且广泛应用于工业控制领域的反馈控制器&#xff0c;它由比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;和微分&#xff08;D&#xff09;三个部分组成。通过对这三个部分的综合调节&#xff0c;PID控制器能够实现对被控对象的…...

python 使用 企微机器人发送消息

import requestswecom_bot_webhook ""msg_text "" # 要发送的消息内容""" mentioned_mobile_list : 手机号列表 , 提醒手机号对应的群成员(某个成员) """ res requests.post(wecom_bot_webhook,json{"msgtype"…...

ARM/Linux嵌入式面经(五二):华为

文章目录 一面技术面相关问题1. **硬件改进的具体内容是什么?**硬件改进的具体内容深入询问及回答2. **在维护前任师兄的代码时,你遇到了哪些挑战?**问题回答面试官追问及回答3. **在嵌入式系统中,内存泄漏通常有哪些原因?**一、内存泄漏的主要原因二、内存泄漏的具体场景…...

[旧日谈]高清画面撕裂问题考

背景 无边框透明背景透明的窗口&#xff0c;在随着缩放比例非整数倍数放大时的画面发生了露底、撕裂问题。 当我们在使用Qt开发的时候&#xff0c;遇到了一个结构性问题。因为我们的软件是自己做的&#xff0c;所以要自己定义标题栏&#xff0c;所以我们设置了软件为FrameLess…...

Nginx反向代理-域名代理前后端项目部署流程

一、下载Nginx 地址&#xff1a;https://nginx.org/en/download.html 1、稳定版本下载 二、Nginx配置 1、下载文件完成后&#xff0c;解压文件 2、打开文件目录下conf目录&#xff0c;打开找到nginx.conf 3、文件配置 注意&#xff1a;.conf 文件使用文本编辑器编辑后&…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...