C++模板初阶
1. 泛型编程
代码语言:javascript
AI代码解释
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
void Swap(double& left, double& right)
{
double temp = left;
left = right;
right = temp;
}
void Swap(char& left, char& right)
{
char temp = left;
left = right;
right = temp;
}
我们可以看到,swap的函数重载实现了很多,但是有很多不足的问题
1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增
加对应的函数
2. 代码的可维护性比较低,一个出错可能所有的重载均出错
所以我们能否做一个模板,让编译器懂得如何根据不同类型来帮助我们生成不同类型的函数呢?
C++就有这样的模板,通过给这个模板不同的数据类型,来获取不同数据类型的函数,让我们在敲代码的时候省下很多时间。
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
模板分为:“函数模板”,“类模板”
2.函数模板
2.1 函数模板概念
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生
函数的特定类型版本。
2.2 函数模板格式
template<typename T1, typename T2,......,typename Tn>
返回值类型 函数名 ( 参数列表 ){}
注意: typename 是 用来定义模板参数 关键字 , 也可以使用 class( 切记:不能使用 struct 代替
class)
2.3 函数模板的原理
函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。
所以其实模板就是将本来应该我们做的重复的事情交给了编译器

在编译器编译阶段 ,对于模板函数的使用, 编译器需要根据传入的实参类型来推演生成对应
类型的函数 以供调用。比如: 当用 double 类型使用函数模板时,编译器通过对实参类型的推演,
将 T 确定为 double 类型,然后产生一份专门处理 double 类型的代码 ,对于字符类型也是如此。2.4 函数模板的实例化 用不同类型的参数使用函数模板时 ,称为函数模板的 实例化 。模板参数实例化分为: 隐式实例化
更多推荐
所有评论(0)