模板的局限性

news/2024/4/29 16:00:50

大家好:

        衷心希望各位点赞。

        您的问题请留在评论区,我会及时回答。

模板的局限性

模板的通用性并不是万能的。函数模板传入数组或用户自定义的数据类型,就有可能发生错误。

例如:

template<typename T>
void f(T a, T b)
{a = b;
}

在上述代码提供的赋值操作中,如果传入的a和b是一个数组,就无法实现赋值操作了。

例如:

template<typename T>
void f(T a, T b)
{if (a > b){cout << a << endl;}
}

在上述代码中,如果传入的a和b是自定义的数据类型Person,也无法正常运行。

因此,C++为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板。

具体化模板

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;// 自定义数据类型
class Person
{
public:string m_Name;int m_Age;Person(string name, int age){m_Name = name;m_Age = age;}
};// 对比两个数据是否相等
template<typename T>
bool myCompare(T& a, T& b)
{return a == b ? true : false;
}// 利用函数的具体化模板实现对比自定义数据类型Person
// 具体化模板会优先调用
template<> bool myCompare(Person& a, Person& b)
{if (a.m_Name == b.m_Name && a.m_Age == b.m_Age){return true;}else{return false;}
}void test()
{Person p1("张三", 18);Person p2("李四", 20);// 具体化模板会优先调用int ret = myCompare(p1, p2);if (ret){cout << "p1 == p2" << endl;}else{cout << "p1 != p2" << endl;}
}int main(void)
{test();system("pause");return 0;
}

运行截图:

总结

利用具体化模板,可以解决自定义类型的通用化。

掌握模板并不是为了写模板,而是在STL中,能够运用系统提供的模板。 


http://www.mrgr.cn/p/55138063

相关文章

04基本数据类型

【一】数字类型(int/float) (1)作用整数类型用于表示整数,是一种基本的数字类型,广泛用于表示计数、索引等整数值。 浮点类型用于表示带有小数部分的数值,适用于需要更精确表示的情况。(2)定义 # 【1】整型 -- int number = 18# 查看内存地址 print(id(number)) # 14…

Camera sensor bringup

Camera Sensor Module配置信息: Camera Module Configuration 的信息包含在:<cameraModuleData> … </cameraModuleData>以vendor/qcom/proprietary/chi-cdk/oem/qcom/module/xxx_sunny_s5khm2_wide_module.xml 为例:各配置参数含义如下:参数名说明cameraIdsen…

【差分约束+并查集】第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

python的一些知识点

在C C Java中&#xff0c;基本数据类型变量&#xff08;将常量数据存储在变量空间当中&#xff09; int a 3; int b 4; 在C C中&#xff0c;指针变量&#xff08;存储的是变量的物理内存地址&#xff09; int a 3; int* b; b &a; int** c; c &b; printf("%d&…

【Linux C | 多线程编程】线程的创建、线程ID、线程属性

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-03-22 0…

必备知识点 路由

django必备知识点 路由 1.Django生命周期请求流程图浏览器>> 发送请求(Http请求) >> web服务网关接口(django默认的wsgiref模块不能承受高并发,最大只有1000左右) >> 中间件 >> 缓存数据库(返回给中间件已经缓存过的数据) >> urls.py(路由层) &…

【C++初阶】之类和对象(下)

【C初阶】之类和对象&#xff08;下&#xff09; ✍ 再谈构造函数&#x1f3c4; 初始化列表的引入&#x1f498; 初始化列表的语法&#x1f498; 初始化列表初始化元素的顺序 &#x1f3c4; explicit关键字 ✍ Static成员&#x1f3c4; C语言中的静态变量&#x1f3c4; C中的静…

vscode添加gitee

1.创建仓库 2.Git 全局设置 3.初始化仓库 2.1 打开vscode打开需要上传到给git的代码文件 2.2.点击左边菜单第三个的源代码管理->初始化仓库 4.点击加号暂存所有更改 5.添加远程仓库 5.1 添加地址&#xff0c;回车 5.2 填写库名&#xff0c;回车 6.提交和推送 6.1 点击✔提交…

用搜索引擎收集信息-常用方式

1&#xff0c;site csdn.net &#xff08;下图表示只在csdn网站里搜索java&#xff09; 2&#xff0c;filetype:pdf &#xff08;表示只检索某pdf文件类型&#xff09; 表示在浏览器里面查找有关java的pdf文件 3&#xff0c;intitle:花花 &#xff08;表示搜索网页标题里面有花…

Vulnhub之dc-7

一信息收集 IP扫描端口扫描访问 80发现登录框上面提示说爆破可能不会成功,方法在外框所以可能在这里:谷歌搜索@DC7USER 发现Dc7User进入staffdb项目看看,在config.php发现账号密码发现有用户名和密码:username = "dc7user" password = "MdR3xOgB7#dW";…

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中&#xff0c;数据是通过很多计算机或者通信设备相互转发&#xff0c;才能够到达目的地,所以在这个转发的过程中&#xff0c;如果通信包…

Oracle查询数据库万能SQL

Oracle 数据库表简要说明数据库表 描述USER 开头的 只能查询自身用户的表DBA 开头的 最高权限,只能用sys、system用户才能查询CDB 开头的 Container Database 数据库容器ALL 开头的 sys、system、普通用户都能查查询数据库表 -- 查询数据库表字段:以下的表都可以作为主表查询…

134.加油站

// 定义一个名为Solution的类 class Solution {// 定义一个公开方法canCompleteCircuit&#xff0c;输入参数为两个整数数组gas和cost&#xff0c;分别代表加油站的汽油量和消耗油量public int canCompleteCircuit(int[] gas, int[] cost) {// 初始化当前剩余油量sum为0&#x…

开启污水处理新纪元:3D可视化技术引领行业变革

在科技日新月异的今天,环保事业也迎来了前所未有的发展机遇。污水处理作为环保领域的重要组成部分,其技术的革新与进步,对于保护水资源、维护生态平衡具有重要意义。在科技日新月异的今天,环保事业也迎来了前所未有的发展机遇。污水处理作为环保领域的重要组成部分,其技术…

PCL拟合并绘制平面(二)

使用RANSAC拟合点云平面 1、C实现2、效果图 普通的点云平面拟合方式在一般情况下可以得到较好的平面拟合效果&#xff0c;但是容易出现平面拟合错误或是拟合的平面不是最优的情况。此时就需要根据自己的实际使用情况&#xff0c;调整平面拟合的迭代次数以及收敛条件。 使用RAN…

软件杯 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 人脸识别系统 该项目…

干掉5大阻碍,vivo X Fold3迈向折叠之外

兴奋,且焦虑。这是今年手机头部厂商普遍的双重心态。 很兴奋,高端手机特别是折叠屏手机的市场比例不断放大,这对于在科技上投入重金的头部厂商是利好;更大的利好是AI开启了智能手机的新产业周期,有望复刻当年从功能机跃升到智能手机的辉煌十年。 很焦虑,是因为技术越来越…

Win32堆的调试支持

堆检查、调试Win32堆的调试支持为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试。1:堆尾检查(Heap Tail Check) HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出。 2:释放检查(Heap Free Check)在释放堆块时进行检查,防止释放同一个堆块。 3…

实变函数第一次大作业

实变函数第一次大作业

如何选择适合自己企业的进销存软件?

全网最全&#xff1a;本篇全文2000&#xff0c;是我和团队十几年经验的完整总结&#xff0c;希望能帮助大家选择合适自己企业的进销存管理系统&#xff0c;建议收藏&#xff01; 全文主要内容&#xff1a; 进销存软件的四大血包选择进销存软件时&#xff0c;需要多维思考的原…