前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++】”如虎添翼“:模板初阶

【C++】”如虎添翼“:模板初阶

作者头像
用户11456817
发布于 2025-05-13 00:53:56
发布于 2025-05-13 00:53:56
3000
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行
泛型编程

C++中一种使用模板来实现代码重用和类型安全的编程范式。它允许程序员编写与数据类型无关的代码,从而可以用相同的代码逻辑处理不同的数据类型。模板是泛型编程的基础

模板分为两类:
  1. 函数模板:代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生 函数的特定类型版本
  2. 类模板
函数模板:

代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生 函数的特定类型版本

提供一个函数的模板,但是类型是不固定的,对于这种编程也叫泛型编程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Template<typename T1, typename T2,......,typename Tn>//模板格式


template<typename T>//T是一个类型的名称,没有要求;typename是一个关键字,后面跟的是泛型类型的名字,typename也能换成class。typename T合起来就是一个模板参数
void Swap(T& left,T& right)
{
	T temp = left;
	left = right;
	right = temp;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<typename T>
void Swap(T& left,T& right)
{
	T temp = left;
	left = right;
	right = temp;
}
int main()
{
	int x = 1, y = 2;
	double m = 1.1, n = 2.2;
	Swap(x,y);//这里两处函数调用,看似调用的是一个函数,但实际上时调用了两个函数(函数调用要建立栈帧,一个是int类型,一个double类型,类型大小都不一样,更不可能调用的是同一个函数了),这个可以从汇编层来观察
	Swap(m,n);
	return 0;
}

观察汇编代码发现,call的地址不一样,说明调用的不是同一个函数。

原理:

编译器通过你编写的模板,再根据你传入的参数,自行生成对应的函数,调用的就是这个编译器自行生成的函数

如果你传入两个参数,这两个参数的类型不一样,就需要写两个模板参数,否则编译会不通过

正确做法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<typename T1, typename T2>
void Swap(T1&left,T2&right)
{
	T1 temp = left;
	left = right;
	right = temp;
}
int main()
{
	int x = 1, y = 2;
	double m = 1.1, n = 2.2;
	Swap(x,n);
	Swap(m,y);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++修炼之路】7. 模板初阶
如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。
每天都要进步呀
2023/03/28
3770
【C++修炼之路】7. 模板初阶
C++模板(初阶)
如果我们定义了这个函数,其参数是int&类型的,也就是只能将整型的数据进行交换,那么如果我一个项目里面,不仅要进行整型的数据交换,还要浮点,自定义类型等等,那岂不是要使用很多个函数,而且函数的内容几乎一样。
二肥是只大懒蓝猫
2023/03/30
4100
C++模板(初阶)
C++初阶-模板初阶
C++模板初阶 零、前言 一、泛型编程 二、函数模板 1、函数模板定义及使用 2、函数模板原理 3、函数模板实例化 4、函数模板匹配原则 三、类模板 1、类模板定义及使用 2、类模板实例化 零、前言 本章主要讲解C++的模板相关的初阶知识 一、泛型编程 用函数重载来实现交换变量函数: void Swap(int& left, int& right) { int temp = left; left = right; right = temp; } void Swap(double& left, d
用户9645905
2022/11/30
4590
C++初阶-模板初阶
C++之模板(上)
本文介绍了C++模板的基础概念,简单介绍了泛型编程,模板,以及模板中的函数模板与类模板等相关概念。
摘星
2023/04/28
4400
C++之模板(上)
【C++】初识模板,拿来吧你
文章目录 一、泛型编程 二、函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4 函数模板的实例化 1. 隐式实例化 2. 显式实例化 5.模板参数的匹配原则 三、类模板 1 类模板的定义格式 2 类模板的实例化 四、模板不支持分离编译(了解) 一、泛型编程 如何实现一个通用的交换函数呢? 我们可以针对不同的数据类型写出不同的交换函数 void Swap(int& left, int& right) { int temp = left; left = right;
平凡的人1
2022/11/15
2860
【C++】初识模板,拿来吧你
【C++】第七节—模版初阶+STL简介
那能否 告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?
云边有个稻草人
2025/04/03
630
【C++】第七节—模版初阶+STL简介
【C++】模板初阶
以实现交换函数为例,在C语言中即使是近乎完全一致的的功能,通过代码实现,只要参数不同,我们就需要写对应类型的不同函数名的函数,在之前的学习中,我们已经学习了函数重载,我们不再需要起不同的函数名,比起C语言方便不少,但是不容忽视的是函数重载仍然有不好的地方。
ZLRRLZ
2024/12/13
1120
【C++】模板初阶
【C++学习】模板初阶&&STL简介
使用函数重载虽然可以实现,但是有一下几个不好的地方: 💞 1、重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。 💞 2、代码的可维护性比较低,一个出错可能所有的重载均出错。
IsLand1314
2024/10/15
1430
【C++学习】模板初阶&&STL简介
C++奇迹之旅:C++初阶模版
泛型编程是一种编程范式,它允许程序员编写不依赖于特定数据类型的代码。在泛型编程中,程序员定义一些通用的算法和数据结构,这些可以在不同的数据类型上使用。
学习起来吧
2024/05/05
970
【C++】C++模板基础知识篇
所以c++就提供了模板,就相当于一个模具,让编译器根据不同的类型利用该模子来生成代码。
zxctscl
2024/03/09
1310
【C++】C++模板基础知识篇
【C++视角】C++之模板(初阶)
在学习C语言是经常会遇到一类问题--写各种被频繁调用的函数,这类函数不能被修改类型而导致需要反复写,十分繁琐。在C++中,祖师爷为我们创建了一种模板,能够填充各种类型而自动生成各种类型的代码。这种也被称为泛型编程,而泛型编程的主要利用就是模板。
小文要打代码
2024/10/16
980
【C++】泛型编程——模板初阶
C++引入了泛型编程,就可以解决这个问题。 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 模板是泛型编程的基础,又分为函数模板和类模板。
YIN_尹
2024/01/23
1900
【C++】泛型编程——模板初阶
初识C++模板
        在写代码时,我们常常因为一个函数的类型不同而不能使用感到困扰。一个简单的交换函数,我们可能都得写好几份
青衫哥
2023/03/31
4280
初识C++模板
【C++初阶】想要编译器为你干活吗?来试试模板吧(模板初阶)
那只能当个CV工程师了,然后再修修改改,但是如果有很多类型呢?后期又需要改动该怎么办呢?一个一个函数的改吗?多个功能相同的函数,又会使程序可读性降低,代码冗余。
aosei
2024/01/23
1400
【C++初阶】想要编译器为你干活吗?来试试模板吧(模板初阶)
C++初阶:入门泛型编程(函数模板和类模板)
现在就轮到泛型编程出场了:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
是Nero哦
2024/02/01
2750
C++初阶:入门泛型编程(函数模板和类模板)
【C++】初识模板
假设我们想实现一个交换函数,并且支持不同类型的参数实现,我们可以用 typedef 将类型进行重命名,例如以下代码:
YoungMLet
2024/03/01
1150
【C++】初识模板
C++:模版初阶 | STL简介
使用函数重载虽然可以实现,但是有一下几个不好的地方: 1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数 2. 代码的可维护性比较低,一个出错可能所有的重载均出错
小陈在拼命
2024/03/01
1810
C++:模版初阶 | STL简介
【C++】初识模板
如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。
P_M_P
2024/03/11
1270
【C++】初识模板
C++中的标准化工厂—— 模板
        众所周知,C++是基于C语言的编写,所以它也继承了众多C的特性(当然也包括部分缺点),且基于它们进行改良和优化,这篇文章要讲的是模板,这算的上是C++基于C的一个“懒人利器”
比特大冒险
2023/04/16
8150
C++中的标准化工厂—— 模板
【C++】初阶模板
这个时候因为交换的数据类型并不相同,就需要我们编写很多Swap交换函数来完成这一功能,如:
修修修也
2024/04/20
1180
【C++】初阶模板
相关推荐
【C++修炼之路】7. 模板初阶
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验