提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、模板是什么?
类似一个万能的占位符声明,传入数据会自动推导出类型,分为模板类和模板函数
二、模板函数
顾名思义,在函数上面声明,具体语法如下:
template <class 类型参数1, class类型参数2, ...>
返回值类型 模板名(形参表)
{
函数体
}
例子:
template <class T>
void Swap(T & x, T & y)
{
T tmp = x;
x = y;
y = tmp;
}
简单来说,就是把函数中用到的类型放到上面去声明,而声明的那个变量能自动识别传入的类型。
class也可用typename关键字替换。
调用时也可指定类型不用自动识别:
#include <iostream>
using namespace std;
template <class T>
T Inc(int n)
{
return 1 + n;
}
int main()
{
cout << Inc<double>(4) / 2;
return 0;
}
三.模板类
模板类即是在类上面声明:
模板类定义对象:
类模板名<实际类型名> 对象名;
类模板名<实际类型名> 对象名(实参表列);
如:
Compare<int> cmp;
Compare<int> cmp(3,7);
关于类模板的注意事项:
1.类模板的类型参数可有多个,每个前需加上class
2.注意类模板的作用域
3.模板类可以派生
总结
对于模板的简单理解:对于下面类或函数中类型的声明,声明变量可识别传入值得类型