一、模板的理解与使用
首先要理解一个基本事实,模板的作用是让我们程序员少写代码,以此来简化开发流程的。
它对于最终编译生成的代码并没有任何影响。
所以即使不用模板,大多数时候我们同样也能够实现相关的功能。
这里以一个简单通用的代码来理解模板:
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
比如像上面这两个函数类似的一系列函数,它们函数名字完全相同,代码逻辑也完全相同,唯一不同的是它们所操作的数据类型,一个为int
,一个为double
,甚至还可以继续添加其它数据类型。
那么使用模板就可以将其简化为一段代码:
template<typename T>
T add(T a, T b) {
return a + b;
}
此时我们不再使用特定的int
、double
之类的类型,而是使用一个类似于变量的T
类型。
方法就是在函数前面写上一个模板关键字template
,然后在其后的<>
中声明模板变量名。
声明模板变量,使用typename
或者class
均可,只不过由于class
一般使用于类,所以模板声明变量的时候大多数时候应该还是使用的typename
,便于区分。
如果需要有多个模板变量,直接跟在后面写即可:template<typename T,typename T1>
当然这里的T
,你也可以自己随便取其它名字,只不过习惯取T
,即Type
的首字母。
此时这个函数要操作的类型就是不确定的了,所以我们在使用的时候就需要指定类型:
add<int>(1,3);
add<double>(1.1, 3.4);
add<char>('s','a');