C++模板(template)

1,什么是c++的模板

在C++中,模板(template)是一种通用的编程工具,允许程序员编写通用代码以处理多种数据类型或数据结构,而不需要为每种特定类型编写重复的代码,通过模板,可以实现代码的复用和泛化,提高代码的灵活性和可维护性———简而言之就是可以写一份通用的模板,便于阅读和管理

c++ 有两种类型的模板
1:函数模板(function tempalte):使用泛型参数的函数(function with generic parameters)

2:类模板(class template):使用泛型参数的类(class with generic parameters)

2,模板的声明

模板的声明方式为以上两种,以下的代码两种声明方式都有用到

3,函数模板

什么是函数模板?
例如:我们求两个数相加的函数,实现int、float、double等多种类型数据相加

如果不使用模板的话,我们可以利用重载函数,定义多个同名函数实现函数重载, 但是采用函数重载,代码重复率高,可维护性极差。

这里可以采用函数模板,定义一个add函数模板,借助它实现多种类型数据相加

函数模板——实际上是定义一个通用函数,它所用到的数据的类型(包括返回值类 型、形参类型、局部变量类型)均被作为参数:不指定具体类型,而是用一个虚拟 的类型来代替(实际上是用一个标识符来占位)。凡是函数体相同的函数都可以用 这个模板来代替,在函数调用时根据传入的实参来逆推出真正的类型。这个通用函 数就称为函数模板。

示例:

4,类模板

除了函数模板外,C++中还支持类模板。类模板是对成员数据类型不同的类的抽象,它 说明了类的定义规则,一个类模板可以生成多种具体的类。与函数模板的定义形式类似。

类模板是在类的前面加上template<class...>,与函数模板不同的是,类模板在使用时要指定T为某个具体的数据类型,以供编译器进行实例化,而函数模板则是传入参数从而推导出T的类型。

示例:

5,模板的弊端

在C++中,模板类和模板函数是不能进行分离编译的,也就是说不能像一般的项目那样,把函数和类的声明都放在以.h为后缀的头文件,把函数的实现放在以.cpp为后缀的源文件中。原因是在链接过程中,编译器找不到模板函数的定义,因为在使用模板时,.h文件中的模板的声明知晓了模板参数的类型,但在.cpp文件中的模版不知道,所以.cpp中模板的定义没法实例化,也就没法在编译阶段生成一份经过实例化的具体的代码,这将导致程序在链接阶段找不到模板函数的实现而报链接错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值