[C++] -- 模板初阶

news2024/10/6 18:28:41

文章目录

  • 函数模板
    • 函数模板的隐式实例化
    • 显式实例化
    • 模板参数的匹配原则
  • 类模板
  • 模板函数声明和定义分离会链接错误

函数模板

对于一些参数不同但功能类似的函数,C++有函数重载,但是函数重载有一些缺陷:

  1. 重载的函数只是参数不同,代码复用率低,只要有新的类型出现时,就需要用户添加新的函数。
  2. 代码的可维护性低,一个出错可能所有的函数都出错。

对于这个缺点,引入函数模板。
在这里插入图片描述
注意:typename是定义类模板的关键字,也可以是class,但是不能是struct。

函数模板在使用传参的时候也叫做函数模板的实例化,又分为隐式实例化和显式实例化。

函数模板的隐式实例化

隐式实例化:编译器根据实参推演函数参数的实际类型。在这里插入图片描述
在这里插入图片描述

显式实例化

在函数名后指明模板函数的参数类型。
在这里插入图片描述
原理就和在使用前进行强转一样,当然,当参数为引用时,也必须为const类型才接受强转。

模板函数不允许自动类型转换,普通函数可以自动类型转换。

模板参数的匹配原则

如果模板函数和同名的非模板函数都存在时,如果两个函数都符合要调用的时候传入的参数类型,优先调用非模板函数。

类模板

在这里插入图片描述在这里插入图片描述

模板函数声明和定义分离会链接错误

不管是模板函数,还是类模板中的函数,声明和定义在不同文件中,在声明的文件中使用会导致报错。原因是在类中有了函数的声明,但是函数定义在了其他文件中,此时其他文件中的模板函数并不是实际的函数,所以不会进符号表,后期在进行链接时会找不到该函数的地址而报错。

解决方法:

一. 显示实例化
在另一个文件中进行这样定义
在这里插入图片描述
但是这种方法有缺陷,就是只能针对一种类型,用其他的又要继续补,太麻烦!

二. 不分离声明和定义到两个文件中
也就是说直接将声明和定义都放在.h文件中,或者直接定义在类里面。

也有人会用.hpp文件,也就是说将.h和.cpp放在一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【五六七人口普查】我国省市两级家庭户住房状况

人口数据是我们在各项研究中最常使用的数据!之前我们分享过第七次人口普查(简称七普)的数据!很多小伙伴拿到数据后都反馈数据非常好用,同时很多小伙伴咨询有没有前面几次人口普查的数据,这样方便做人口变化…

7.1 微服务-SpringCloud(二)

目录 前言 7.1.5 Hystrix 7.1.5.1 什么是Hystrix 7.1.5.2 雪崩问题 7.1.5.3 线程隔离,服务降级 7.1.5.4 搭建 7.1.5.4.1 引入依赖 7.1.5.4.2 开启熔断 7.1.5.4.3 编写降级逻辑 1.局部降级逻辑 2.全局降级逻辑 7.1.5.4.4 设置超时 7.1.5.5 服务熔断 7.…

2023-02-09 - 1 Elasticsearch简介

1 Elasticsearch的基本概念 1.1 索引 在使用传统的关系型数据库时,如果对数据有存取和更新操作,需要建立一个数据库。相应地,在ES中则需要建立索引。用户的数据新增、搜索和更新等操作的对象全部对应索引。 1.2 文档 在使用传统的关系型数…

上海亚商投顾:三大指数均涨超1% 芯片板块集体大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪三大指数今日低开高走,午后集体涨超1%,创业板指盘中涨超1.7%。芯片板块集体大涨,…

Node——使用nvm切换node版本

1. 下载mvn安装包 https://pan.baidu.com/s/1alfyRvwVWr_TrkN0A9Er5g?pwd1v7c 2. 安装后命令输入mvn -v 验证是否安装成功 3. mvn命令 nvm list available 显示可下载的版本nvm install [node版本号] 显示可下载的版本nvm uninstall [node版本号] 删除已安装的指定版本nvm…

内网资源探测

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :内网安全 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是…

计算机软件技术基础复习

数据结构 文章目录数据结构第一节 数据结构的基本概念第二节 线性结构线性表顺序表和链表的特点实现循环队列第三节 非线性结构树操作系统操作系统概述进程和程序存储空间的组织数据库技术数据库设计软件技术软件生命周期第一节 数据结构的基本概念 数据结构:指相互…

SQLSERVER 的 truncate 和 delete 有区别吗?

一:背景 1. 讲故事 在面试中我相信有很多朋友会被问到 truncate 和 delete 有什么区别 ,这是一个很有意思的话题,本篇我就试着来回答一下,如果下次大家遇到这类问题,我的答案应该可以帮你成功度过吧。 二&#xff1…

Vue2.0页面缓存机制联合页面标签的交互(keep-alive + router)

预期效果:(借助iview-ui的在线体验页面示意一下) 项目中只有一部分页面需要缓存,且存在多级路由的页面。每打开一个菜单,就会新增一个 Tab标签,只要 Tab标签不关闭,对应的页面就会被缓存&#x…

Java Jackson TypeReference获取泛型类型信息【泛型】

Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TyperReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。 Jackson ObjectMapper的readVa…

三表相连 mapjoin

三表相连 mapjoin要求输出的样式三张表score.csvstudent.csvsubject.csv创建三个类StudentScgetset方法实现类MapJoinDriver用mapjoin不需要reduceMapJoinMapper运行结果要求 输出的样式 三张表 score.csv student.csv subject.csv 创建三个类 StudentSc getset方法 插入gets…

Mysql起步之环境搭建8.0

MySQL的下载、安装、配置 MySQL Community Server 社区版本,开源免费,自由下载,但不提供官方技术支持,适用于 大多数普通用户。 MySQL Enterprise Edition 企业版本,需付费,不能在线下载,可以试…

单元测试junit+mock

单元测试 是什么? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个方法、类、功能模块或者子系统。 单元测试通…

Java中类是什么

类(class)是构造对象的模板或蓝图。 我们可以将类想象成制作小甜饼的模具,将对象想象为小甜饼。由类构造(construct)对象的过程称为创建类的实例(instance)。 正如前面所看到的,用Java 编写的所有代码都位于某个类里面。 标准 Java 库提供了几千个类&a…

【Axure教程】转盘抽奖原型模板

转盘抽奖是营销活动中很常用的一种方式,在线上我们也可以经常看到转盘抽奖的活动,所以今天作者就教大家在Axure中怎么制作一个转盘抽奖的原型模板。一、效果展示1、可以随机转动轮盘,轮盘停止时,指针对着的奖品高亮显示2、可以重复…

Qt + Clion + cmake 环境配置

本文不涉及QML,因为我没用过 用C写窗体,同时还有可视化UI界面,这不比控制台程序香吗?QAQ我大一写c大作业的时候要是知道这个东西,我绝对满分啊!!!! To: 新版…

Mysql—触发器

触发器 简介 触发器用于直接在某种操作后(数据的增删改查等),通过事件执行设置触发器时的 sql 语句,具有原子性。 可通过 sql 语句直接编写,关键词:CREATE TRIGGER 触发器名称。 例如:在表 st…

String面试题

String面试题 总结的很好:https://blog.csdn.net/qq_45950109/article/details/116992408 String特点 1.被final关键字修饰,不能被继承。实现Serializable,表示支持序列化。实现Comparable,表示可以排序。 2.底层是char数组和…

2023上半年软考报名到弘博创新错不了

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…

ChatGPT为什么这么火爆?这是一篇从入门到玩坏的教程

什么是ChatGPT ChatGPT是由OpenAI开发的一个人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT-3.5架构的大型语言模型並通过强化学习进行训练。 ChatGPT可以做什么? 你能想到的,它基本上都能和你聊上两句,比如写一…