C++模板的语法以及原理
函数模板
函数模板的概念
函数模板代表了一个函数家族,该函数模板与类型无关,根据实参类产生特定的类型版本
函数模板格式
template<typename Type>
Type 函数名(Type x)
{}
- 1
- 2
- 3
用交换函数作为例子:
template<typename T>
T Swap(T &a,T &b){
T tmp = a;
a = b;
b = tmp;
}
- 1
- 2
- 3
- 4
- 5
- 6
当两个参数为不同类型时该怎么办呢?
template<typename T>
T Add(T x1,T x2){
return x1+x2;
}
int main(){
//第一种方法是直接强制类型转化其中一个参数
Add((double)10,10.5);
//第二种是直接将类型定义好
Add<double>(10,10.5);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
非模板函数和其同名模板函数可以同时存在吗
答案是可以的,那么当函数调用时,调用哪一个呢?
对于非模板函数和其同名的模板函数,如果条件都相同,则调用非模板函数,如果模板函数可以产生一个更好的匹配函数,则调用模板函数
类模板
其实类模板和函数模板是没有很大差别的
template<typename T>
class Test
{};
- 1
- 2
- 3
类模板中的函数放在类外进行定义时,需要加模板参数列表
推荐阅读