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

C++——类模板的概念和意义

1.一些类主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关只关注需要实现的功能如数组类、链表类、Stack类、Queue类2.类模板的应用1只能显示指定具体类型无法自动推导2使用具体类型Type定义对象3.编译器对类模板的处理方式和函数模板相同1从类模板通过具体类型产生不同的类2在声明的地方对类模板代码本身进行编译3在使用的地方对参数替换后的代码进行编译#include iostream #includestring using namespace std; template typename T class Operator { public: T add(T a, T b) { return a b; } T minus(T a, T b) { return a - b; } T multiply(T a, T b) { return a * b; } T divide(T a, T b) { return a / b; } }; int main() { Operatorint op1; cout op1.add(1, 2) endl; Operatorstring op2; cout op2.add(ab, cd) endl; // cout op2.minus(ab, cd) endl; 报错因为string类型没有减法运算 return 0; }所以要重载string类型的减法运算符#include iostream #includestring using namespace std; template typename T class Operator { public: T add(T a, T b) { return a b; } T minus(T a, T b) { return a - b; } T multiply(T a, T b) { return a * b; } T divide(T a, T b) { return a / b; } }; string operator- (const string a, const string r) { return Minus; } int main() { Operatorint op1; cout op1.add(1, 2) endl; //3 Operatorstring op2; cout op2.add(ab, cd) endl; //abcd cout op2.minus(ab, cd) endl; //Minus return 0; }4.类模板的工程应用1类模板必须在头文件中定义2类模板不能分开实现在不同的文件中3类模板外部定义的成员函数需要加上模板声明Complex.h#pragma once //声明成员函数 template typename T class Operator { public: T add(T a, T b); T minus(T a, T b); T multiply(T a, T b); T divide(T a, T b); }; //定义成员函数 template typename T T OperatorT::add(T a, T b) { return a b; } template typename T T OperatorT::minus(T a, T b) { return a - b; } template typename T T OperatorT::multiply(T a, T b) { return a * b; } template typename T T OperatorT::divide(T a, T b) { return a / b; }main.cpp#include iostream #includestring using namespace std; #include Complex.h int main() { Operatorint op1; cout op1.add(1, 2) endl; //3 cout op1.minus(1, 2) endl; //-1 cout op1.multiply(1, 2) endl; //2 cout op1.divide(1, 2) endl; //0 }5.类模板可以定义任意多个不同的类型参数类模板可以被特化当通用类模板对某个 / 某些特定类型不适用、需要定制逻辑时为这些类型单独编写专属的模板实现。1指定类模板的特定实现2部分类型参数必须显示指定3根据类型参数分开实现类模板部分特化用特定规则约束类型参数完全特化完全显示指定类型参数部分特化#include iostream #includestring using namespace std; template typename T1, typename T2 class Test { public: void add(T1 a, T2 b) { cout void add(T1 a, T2 b) endl; cout a b endl; } }; template typename T class TestT, T { //当Test类模板的两个类型参数完全相同时使用这个实现 public: void add(T a, T b) { cout void add(T a, T b) endl; cout a b endl; } }; int main() { Testint, float t1; t1.add(1, 2.5); Testlong, long t2; t2.add(5, 5); return 0; }运行结果void add(T1 a, T2 b)3.5void add(T a, T b)10完全特化完全特化表示显示指定类型参数,模板声明只需写成template,并在类名右侧指定参数#include iostream #includestring using namespace std; template typename T1, typename T2 class Test { public: void add(T1 a, T2 b) { cout void add(T1 a, T2 b) endl; cout a b endl; } }; template typename T1,typename T2 class TestT1*, T2* { public: void add(T1* a, T2* b) { cout void add(T1 * a, T2 * b) endl; cout *a *b endl; } }; //完全特化 template class Testvoid*, void* { public: void add(void* a, void* b) { //当T1void* 并且 T2void* 时 cout void add(void* a, void* b) endl; cout Error... endl; } }; int main() { Testint, float t1; t1.add(1, 2.5); Testvoid*, void* t3; t3.add(NULL, NULL); Testint*, double* t4; int a 1; double b 0.1; t4.add(a, b); return 0; }运行结果void add(T1 a, T2 b)3.5void add(void* a, void* b)Error...void add(T1 * a, T2 * b)1.16.类模板特化注意事项1特化只是模板的分开实现本质上是同一个类模板2特化类模板的使用方式是统一的必须显示指定每一个类型参数类模板特化和重定义的区别重定义一个类模板和一个新类或者两个类模板特化以统一的方式使用类模板和特化类编译器自动优先选择特化类函数模板也可以特化但只能完全特化#include iostream #includestring using namespace std; ////完全特化 //template //class Testvoid*, void* { //public: // void add(void* a, void* b) { //当T1void* 并且 T2void* 时 // cout void add(void* a, void* b) endl; // cout Error... endl; // } //}; //对上面的特化的重定义 class Test_Void { public: void add(void* a, void* b) { cout void add(void* a, void* b) endl; } }; //函数模板 templatetypename T bool Equal(T a, T b) { cout bool Equal(T a, T b) endl; return a b; } //函数模板的完全特化 template bool Equaldouble(double a, double b) { const double delta 0.00000000000001; double r a - b; cout bool Equaldouble(double a, double b) endl; return (-delta r) (r delta); } int main() { //Testvoid*, void* t3; Test_Void t3; t3.add(NULL, NULL); cout Equal(1, 1) endl; cout Equaldouble(0.001, 0.001) endl; //由于浮点数在内存中的表示是不精确的所以不能用比较所以要用函数的完全特化 return 0; }运行结果void add(void* a, void* b)bool Equal(T a, T b)1bool Equaldouble(double a, double b)1

相关文章:

C++——类模板的概念和意义

1.一些类主要用于存储和组织数据元素,类中数据组织的方式和数据元素的具体类型无关,只关注需要实现的功能,如数组类、链表类、Stack类、Queue类2.类模板的应用(1)只能显示指定具体类型,无法自动推导&#x…...

CV实战:Harris角点检测在图像拼接中的应用(Python+OpenCV实现)

1. 图像拼接为什么需要角点检测 第一次尝试用Python做图像拼接时,我直接把两张照片叠在一起,结果发现接缝处总是错位。后来才明白,计算机不像人眼能直观匹配图像,它需要明确的"路标"来对齐画面。这就是角点检测的价值所…...

Docker 27低代码容器化真香现场:Java/Spring Boot项目3分钟生成可验证镜像,含SBOM+SCA+签名三重合规凭证(附GPG密钥生成脚本)

第一章:Docker 27低代码容器化的革命性演进Docker 27并非官方发布的版本号,而是社区对Docker平台与低代码能力深度融合趋势的前瞻性代称——它标志着容器技术正从纯命令行驱动的运维范式,跃迁为可视化编排、策略即配置、应用即模板的新型开发…...

每日打卡15

128&#xff1a;#include <bits/stdc.h>using namespace std;int m, cnt;// 移动n块&#xff0c;从a->c&#xff0c;借助b void hanoi(int n, char a, char b, char c) {if (n 1) {// 如果当前步骤就是第m步&#xff0c;直接输出 if (cnt m) cout << a <&l…...

实时手机检测-通用高性能部署:共享内存IPC优化多进程并发检测吞吐

实时手机检测-通用高性能部署&#xff1a;共享内存IPC优化多进程并发检测吞吐 1. 引言 你有没有遇到过这样的场景&#xff1f;在一个大型活动现场&#xff0c;需要实时监控成千上万的手机设备&#xff1b;或者在电商仓库里&#xff0c;要对流水线上的手机进行快速分拣和质检。…...

Fish Speech 1.5保姆级教程:开箱即用的声音克隆与多语言TTS实操指南

Fish Speech 1.5保姆级教程&#xff1a;开箱即用的声音克隆与多语言TTS实操指南 1. 引言&#xff1a;为什么选择Fish Speech 1.5&#xff1f; 你是不是曾经遇到过这样的困扰&#xff1a;想要给视频配音&#xff0c;但自己的声音不够好听&#xff1b;需要制作多语言内容&#…...

Lychee-Rerank企业面试系统应用:Java八股文智能匹配

Lychee-Rerank企业面试系统应用&#xff1a;Java八股文智能匹配 最近跟几个做技术招聘的朋友聊天&#xff0c;发现他们有个共同的烦恼&#xff1a;每天要筛几十份简历&#xff0c;面试的时候还得现场判断候选人回答的Java八股文到底靠不靠谱。光靠面试官自己记和判断&#xff…...

清音刻墨Qwen3效果展示:儿童教育动画语音逐帧对齐字幕生成实录

清音刻墨Qwen3效果展示&#xff1a;儿童教育动画语音逐帧对齐字幕生成实录 1. 引言&#xff1a;当“司辰官”遇见动画片 想象一下这个场景&#xff1a;你是一位儿童教育内容创作者&#xff0c;刚刚完成了一集生动有趣的动画配音。你手上有完整的配音音频和对应的台词文稿&…...

(即插即用模块-特征处理新篇) 空间自适应特征调制(SAFM):轻量化超分中的Transformer高效替代方案

1. 空间自适应特征调制&#xff08;SAFM&#xff09;是什么&#xff1f; 第一次看到SAFM这个名词时&#xff0c;我也是一头雾水。这玩意儿到底是干啥的&#xff1f;简单来说&#xff0c;它就像是一个智能滤镜&#xff0c;能够自动识别图像中不同区域的特征&#xff0c;然后有针…...

离线骑行与虚拟训练:突破网络限制的三种解决方案

离线骑行与虚拟训练&#xff1a;突破网络限制的三种解决方案 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline 当你在山区训练遇到网络中断时&#xff0c;当你在旅行途中想保持训练节奏时&#xff0c;当你…...

解锁NI VeriStand隐藏技能:用LabVIEW FPGA打造25ns级高精度硬件在环测试系统

解锁NI VeriStand隐藏技能&#xff1a;用LabVIEW FPGA打造25ns级高精度硬件在环测试系统 在汽车电子和航空航天领域&#xff0c;硬件在环&#xff08;HIL&#xff09;测试系统的性能直接决定了产品验证的可靠性和效率。传统基于实时处理器的方案虽然成熟&#xff0c;但在面对需…...

Tiktokenizer:精准掌控AI令牌计算的高效开发工具

Tiktokenizer&#xff1a;精准掌控AI令牌计算的高效开发工具 【免费下载链接】tiktokenizer Online playground for OpenAPI tokenizers 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokenizer 在AI应用开发中&#xff0c;你是否曾因提示文本令牌超限导致API调用失…...

Mac Mouse Fix:重新定义Mac鼠标效率的生产力工具

Mac Mouse Fix&#xff1a;重新定义Mac鼠标效率的生产力工具 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 价值定位&#xff1a;让每一只鼠标释放专业潜力…...

一键部署AgentCPM:开箱即用的本地研究报告生成解决方案

一键部署AgentCPM&#xff1a;开箱即用的本地研究报告生成解决方案 1. 为什么选择本地研报生成工具 在当今研究工作中&#xff0c;数据安全和隐私保护已成为不可忽视的核心需求。传统在线AI写作工具存在三大痛点&#xff1a; 数据泄露风险&#xff1a;上传敏感研究课题到第三…...

FLUX.1-dev-fp8-dit进阶:Python多进程加速批量图像生成

FLUX.1-dev-fp8-dit进阶&#xff1a;Python多进程加速批量图像生成 1. 为什么需要多进程加速 当你开始用FLUX.1模型批量生成图片时&#xff0c;可能会遇到一个常见问题&#xff1a;生成100张图片要等好几个小时。这不是模型本身的问题&#xff0c;而是因为Python默认情况下一…...

3.15打卡

111.统计候选人的票数问题描述设有3个候选人zhang、li、wang&#xff08;候选人姓名不区分大小写&#xff09;&#xff0c;10个选民&#xff0c;选民每次输入一个得票的候选人的名字&#xff0c;若选民输错候选人姓名&#xff0c;则按废票处理。选民投票结束后&#xff0c;程序…...

鹅UE大世界射击游戏客户端开发面经

基本情况&#xff1a;boss上技术直接发的面试&#xff0c;应该是缺人被我撞上了。只问了UE(0.7)和C(0.3)的问题&#xff0c;UE的问题有一半围绕项目问的&#xff0c;C的问题纯八股&#xff08;eg&#xff1a;多态和虚函数&#xff09;。UE太不熟啦&#xff0c;挂了。[ㆆ⩊ㆆ]倒…...

2026最新基金估值实时工具|支持分批加仓策略与盈亏汇总(Win版稳定运行)

温馨提示&#xff1a;文末有联系方式工具名称与更新动态 2026最新基金估值实时工具&#xff5c;支持分批加仓策略与盈亏汇总&#xff08;Win版稳定运行&#xff09; 2026年2月2日完成版本迭代&#xff0c;全面适配Windows操作系统&#xff0c;运行流畅无兼容问。工具数据来源与…...

TCP自传:我凭三次握手,成为计网考研必考顶流(附wireshark抓包验证)

大家好&#xff01;我是TCP。欢迎来探索我哈哈哈。一、我的自述&#xff1a;为什么要讲清我的“三次握手”我是TCP&#xff0c;传输层里最操心、最可靠的协议。从计算机网络课本&#xff0c;到考研真题&#xff0c;再到后端开发面试&#xff0c;我永远是高频考点。很多同学背我…...

Phi-3-Mini-128K调用API全指南:Python与Java客户端开发示例

Phi-3-Mini-128K调用API全指南&#xff1a;Python与Java客户端开发示例 你是不是已经部署好了Phi-3-Mini-128K模型&#xff0c;看着那个API地址&#xff0c;却不知道下一步该怎么把它用起来&#xff1f;或者你正在开发一个应用&#xff0c;想集成AI对话能力&#xff0c;但面对…...

Python数据分析师效率工具:Qwen3-14B-Int4-AWQ辅助pandas与可视化

Python数据分析师效率工具&#xff1a;Qwen3-14B-Int4-AWQ辅助pandas与可视化 1. 数据分析师的新助手 作为一名数据分析师&#xff0c;你是否经常遇到这样的场景&#xff1a;面对一堆数据表格&#xff0c;明明知道要做什么分析&#xff0c;却要花大量时间查阅pandas文档&…...

GTE+SeqGPT多场景落地:教育知识库、IT运维助手、HR政策查询三大实战

GTESeqGPT多场景落地&#xff1a;教育知识库、IT运维助手、HR政策查询三大实战 1. 项目概述与核心价值 今天要跟大家分享一个特别实用的AI项目——GTESeqGPT联合方案。这个组合就像给你的业务装上了智能大脑&#xff0c;既能精准理解问题&#xff0c;又能快速生成回答。 简单…...

全任务零样本学习-mT5分类增强版开源可部署:符合GDPR/个保法的数据本地化处理说明

全任务零样本学习-mT5分类增强版开源可部署&#xff1a;符合GDPR/个保法的数据本地化处理说明 1. 引言 想象一下&#xff0c;你手头有一堆文本数据&#xff0c;想用AI模型来处理&#xff0c;比如做数据增强、文本改写或者分类。但问题来了&#xff1a;这些数据可能包含敏感信…...

JiYuTrainer零基础实战指南:从安装到精通的全方位教程

JiYuTrainer零基础实战指南&#xff1a;从安装到精通的全方位教程 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer JiYuTrainer是一款针对极域电子教室软件的防控制工具&#xff0…...

Qwen3-14B开源模型生态:vLLM+Chainlit组合成为中小团队首选部署栈

Qwen3-14B开源模型生态&#xff1a;vLLMChainlit组合成为中小团队首选部署栈 1. 模型简介 Qwen3-14b_int4_awq是基于Qwen3-14B大模型的量化版本&#xff0c;采用AngelSlim技术进行压缩优化。这个版本通过AWQ&#xff08;Activation-aware Weight Quantization&#xff09;方法…...

Deepin Boot Maker:重构启动盘制作逻辑的3个创新维度

Deepin Boot Maker&#xff1a;重构启动盘制作逻辑的3个创新维度 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 在数字化运维场景中&#xff0c;启动盘制作工具的可靠性直接决定系统部署效率。据2025年Linux基金…...

Phi-3-vision-128k-instruct企业应用:航空航天装配图理解+操作步骤语音指导生成

Phi-3-vision-128k-instruct企业应用&#xff1a;航空航天装配图理解操作步骤语音指导生成 1. 模型简介与技术特点 Phi-3-Vision-128K-Instruct是当前最先进的轻量级开放多模态模型&#xff0c;专为处理复杂图文交互任务而设计。这个模型属于Phi-3系列&#xff0c;支持高达12…...

通信工程本科毕业设计入门指南:从选题到原型实现的完整路径

最近在帮几个通信工程专业的学弟学妹看毕业设计&#xff0c;发现大家普遍在起步阶段就卡住了。选题太泛无从下手&#xff0c;仿真跑得飞起但一上硬件就“翻车”&#xff0c;报告写得像实验记录……这些问题我都经历过。今天这篇笔记&#xff0c;就想结合我自己的经验和一些常见…...

告别存档修改烦恼:Diablo Edit全方位使用指南

告别存档修改烦恼&#xff1a;Diablo Edit全方位使用指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 角色培养3大困境与解决方案 作为暗黑破坏神II的忠实玩家&#xff0c;你是否也曾面临以下…...

提升FF14副本效率:MMORPG玩家的动画等待问题解决方案

提升FF14副本效率&#xff1a;MMORPG玩家的动画等待问题解决方案 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 在FF14的日常副本挑战中&#xff0c;玩家常因重复播放的动画序列被迫中断游戏节奏。以&…...