C++ 模板

本文详细介绍了C++中的模板,包括函数模板和类模板。函数模板用于创建泛型函数,允许以类型无关的方式编写代码。类模板则用于生成泛型类,其成员函数可以在使用时实例化。文章还探讨了模板的实例化、非类型模板参数、友元、静态成员等关键概念,为理解和应用C++模板提供了全面的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。

一、函数模板:
如果对于一组函数,他们执行的操作完全一致,参数列表结构也一致,只有某些函数的数据类型不一致,那么我们可以把他们定义成函数模板。

1.函数模板的定义
template <typename T, typename T2>
T Max(const T& parm1, const T& parm2)
{
return parm1 > parm2 ? parm1 : parm2;
}
如上所示,模板的定义是以关键字template开始的,后跟<>包起来的模板参数列表,每个参数都需要关键字typename来声明,参数间用逗号分隔,参数列表不能为空。请注意模板参数列表的声明必须跟模板函数的定义放在一起,即不能一个在头文件,一个在实现文件。

2.函数模板的实例化
实例化是在编译阶段完成的,编译时就能获知具体类型了,且需要注意的是列表中有几个参数,则在函数体的参数列表中就需要使用几个类型或非类型参数,且在实例化时要一一对应的绑定具体参数,不能声明了模板参数却不使用。
2.1 函数模板的显示实例化
在定义了函数模板后,如果想显示的实例化一个函数,可以先按照以下格式进行显示声明:
(1) 以上述模板Max为例,在调用前实例化声明: template int Max(const int&, const int&); //一个声明
(2) 以上述模板Max为例,在调用时实例化: Max(a, b); //直接调用
2.2 函数模板的隐式实例化
如果不想显示的实例化模板,且能保证正确调用,也可以直接调用模板函数,让编译器根据参数类型直接实例化模板。
(1)Max(1, 2); // 隐式实例化,模板参数为int
在这里插入图片描述

3.类型模板参数
例如上文中的T就是一个类型参数,类型参数可以看做一个类型说明符,代表某种数据类型&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值