c++——模板初始识

news2024/9/25 11:14:25

1.函数模板

我们经常用到Swap函数交换两个值。由于需要交换的数据的类型不同,我们就需要写不同参数类型的同名函数,也就是函数重载:

然而这三个函数的逻辑是一样的,写这么多有些多此一举,通过函数模版可以写一个通用的交换函数。

---------------------------------------------------------------------------------------------------------------------------------

1.格式template<typename T1,typename T2,......typename Tn>

typename是关键字,也可以用class代替

T1-Tn是函数的参数类型名(T可以用别的名字代替,只是我们习惯用T)

---------------------------------------------------------------------------------------------------------------------------------

2.用法

---------------------------------------------------------------------------------------------------------------------------------

3.原理

检测你传入的参数类型,隐式的帮你生成这一类型的函数重载。实际上仍然生成了多个函数,调用的时候也不是调用同一个函数,而是调用对应的函数重载,只不过编译器替你写了这些函数。(实际上,由于交换函数使用频繁,已经被纳入库中(swap),不需要我们去写)

---------------------------------------------------------------------------------------------------------------------------------

4.函数模版的显式实例化:

(1)有一种情况:

编译器不确定T是int还是double类型。

为了解决这个问题你可以这样:

但是你也可以这样:

这样直接指定了T类型而不用编译器推演,叫做函数模板的显式实例化(这种情况下,b会转换为int类型)

(2)但是,如果同一个模板参数只做返回值的话:

编译器不能根据推演返回值类型,所以必须模板实例化:

(3)如果有多个模板类型:

也可以同时指定T1,T2(返回值类型可以由T1决定(T1通过参数推演)。T1不是只做返回值,也就不是(3)的那种情况)

---------------------------------------------------------------------------------------------------------------------------------

2.类模板

类模板与函数模板不同的点在于,创建对象时一定要指定模板参数类型.

A<int>就相当于st1的类型

---------------------------------------------------------------------------------------------------------------------------------

类模板中的成员函数函数放在类外进行定义是这样的:
必须加上模板参数列表(template<class T>)
类型也要写成A<T>

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

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

相关文章

文献解读-群体基因组第一期|《对BMI的影响:探究BMI的基因型-环境效应》

关键词&#xff1a;应用遗传流行病学&#xff1b;群体测序&#xff1b;群体基因组&#xff1b;基因组变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;The Impact of ACEs on BMI: An Investigation of the Genotype-Environment Effects of BMI标…

民国漫画杂志《时代漫画》第28期.PDF

时代漫画28.PDF: https://url03.ctfile.com/f/1779803-1248635321-5c67ad?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

Vue中使用Vue-scroll做表格使得在x轴滑动

页面效果 首先 npm i vuescroll 在main.js中挂载到全局 页面代码 <template><div class"app-container"><Header :titletitle gobackgoBack><template v-slot:icon><van-icon clickgoHome classicon namewap-home-o /></templat…

svix - webhooks

文章目录 一、关于 SvixClient Library Overview与 Svix 托管服务的区别 二、运行服务器1、部署1.1 Docker1) 使用 Docker Compose2) 独立容器 1.2 预编译的二进制文件1.3 从源代码构建 2、运行时依赖项3、Redis/Valkey 注意事项持久性 Eviction 政策4、服务器配置4.1 配置文件…

【探索数据之美】“从基础到精通——深入解析数据结构与二叉树的秘密“

gitee代码获取链接&#xff1a;https://gitee.com/flying-wolf-loves-learning/data-structure.git 一、树的概念 1.1 概念简述 数据结构中的树是一种层次结构&#xff0c;它由节点&#xff08;node&#xff09;和边&#xff08;edge&#xff09;组成。每个节点都有零个或多…

微服务-Nacos-安装-集成SpringBoot

微服务-SpringCloud-ALibaba-Nacos Nacos 是阿里巴巴推出的 SpringCloud的组件 官网:什么是 Nacos 主要是为了解决微服务的架构中 服务治理的问题服务治理就是进行服务的自动化管理&#xff0c;其核心是服务的注册与发现。 服务注册&#xff1a;服务实例将自身服务信息注册…

用友GRP-U8 sqcxIndex.jsp SQL注入漏洞(XVE-2024-12560)

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友GRP-U8是用友公司专注于国家电子政务事业&#…

使用 Spring HATEOAS 开发 REST 服务-浅显的理解

随笔&#xff0c;简单理解 一、restful是什么 1、第一层次&#xff08;Level 0&#xff09;的 Web 服务只是使用 HTTP 作为传输方式&#xff0c;实际上只是远程方法调用&#xff08;RPC&#xff09;的一种具体形式。 SOAP 和 XML-RPC 都属于此类 2、第二层次&#xff08;Lev…

三坐标测量机在汽车零部件质量控制中的应用

高质量的零部件能够确保汽车的性能达到设计标准&#xff0c;包括动力性能、燃油效率、操控稳定性等&#xff0c;从而提供更好的驾驶体验&#xff0c;建立消费者对汽车品牌的信任&#xff1b;也推动了汽车行业的技术创新&#xff0c;制造商不断研发新材料、新工艺&#xff0c;以…

汽车制造业安全有效的设计图纸文件外发系统是什么样的?

在汽车制造的世界里&#xff0c;那些设计图不仅仅是公司智慧的闪光点&#xff0c;更是它们竞争的秘密武器。但问题来了&#xff0c;当公司需要和供应商、合作伙伴频繁交换数据时&#xff0c;怎样安全又高效地发送这些设计图&#xff0c;就成了一个头疼的问题。这篇文章会深挖一…

图解 BERT 模型

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

go使用letteravatar生成圆形透明头像图标

官网地址&#xff1a;GitHub - disintegration/letteravatar: Letter avatar generation for Go 我对其中函数改了一下&#xff0c;支持多个字符&#xff0c;效果如下&#xff1a; func TestCreateAvatar(t *testing.T) {GenerateAvatar("Bird Fish", 0, "Bird…

【包邮送书】你好!C语言

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

56. UE5 RPG 给敌人添加AI实现跟随玩家

在这一篇里&#xff0c;我们要实现一下敌人的AI&#xff0c;敌人也需要一系列的行为&#xff0c;比如朝向英雄攻击&#xff0c;移动&#xff0c;在满足条件时施放技能。这些敌人的行为可以通过使用UE的内置的AI系统去实现。 在UE里&#xff0c;只要是基于Character类创建的蓝图…

【从零开始学习RabbitMQ | 第一篇】如何确保生产者的可靠性

目录 前言&#xff1a; 生产者重连机制&#xff1a; 生产者确认机制&#xff1a; Publisher Confirm&#xff08;生产者者确认&#xff09; Publish Return&#xff08;发布返回&#xff09; 总结&#xff1a; 前言&#xff1a; 在现代的分布式系统中&#xff0c;消息队…

5个将文本转语音的工具,高考复习的绝佳助手

高考倒计时10天&#xff01; 在这最后的冲刺阶段&#xff0c;同学们都在拼命刷题&#xff0c;但面对已经整理好的知识点&#xff0c;时间紧迫&#xff0c;如何高效复习呢&#xff1f; 别急&#xff0c;今天我要和大家分享一个绝佳的复习方法——文字转语音。这个方法可以让你…

鸿蒙4.2小版本推出,鸿蒙5.0已经不远了

上个月&#xff0c;市场上迎来了华为鸿蒙系统4字开头的小升级&#xff0c;版本来到了4.2版本。 我们先来看看4.2版本都给用户带来哪些特色&#xff1a; 界面切换更流畅&#xff1a;无论是响应速度还是操作手感&#xff0c;用户都将感受到更加迅速和顺滑的体验 搜星速度的显著…

人类和小鼠转录组上游分析

基础软件 conda install cutadapt, trimmomatic, samtools, hisat2, subread, deeptools -y人类转录组上游分析 # 样本名称 sample_namesample# 线程 threads4# 双端测序原始fastq1和fastq2路径 fastq1_path/path/${sample_name}_1.fq.gz fastq2_path/path/${sample_name}_2.…

【LeetCode】【9】回文数(1047字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;LeetCode 刷题指南&#xff1a;LeetCode刷题指南 题目描述 给一个整数x&#xff0c;如果x是一个回文整数&#xff0c;返回true&#xff1b;否…

CATIA二次开发VBA入门(2)——认识CATIA内置的VBA开发界面

目录 引出VBA界面介绍工具条介绍view下拉菜单insert下拉format下拉debug下拉tool下拉help下拉【重要】补充窗口窗体的模态【重要】 总结认识CATIA二次开发刘瑞欣 vb程序设计教程Excel中的vba开发catia中的vba开发 宏的录制、回放和编辑宏代码精简画圆柱阵列宏Macro文件的3种类型…