C++模板
定义
模板将通用算法与数据类型的实现分离
Templates divide a general algorithm from the implementation of data types.
也可以声明为inline函数 或 extern 函数
优点
- 增加了重用性 – reuse
- 用同样的逻辑处理不同的数据类型
语法
模板定义
template<模板参数list>
- 此语句没有 ; 结尾
- 使用typename 或 class关键字
语法举例:
//声明
template <class U> U min( U, U );
-------------------------------------------------------------------
//实现
template<typename T>
T Min (T a , T b){
//获得较小的那个数据
return (a<b)?a:b;
}
// 数据可能是int 可能是double 可能是char 等, 只要该数据类型有 < 操作符支持
模板函数重载
被非模板函数overload
- 先匹配类型完全同型的函数
- 在匹配类型匹配的模板函数
- 还没有匹配的话, 强制类型转换, 如果还没有找到完全同型的函数, 则报错
template <class T> T max(T a, T b) { return (a>b)? a:b; } int max(int,int); //the overloaded function void fun(int num, char cha) { max(num,num);//invoke function: int max(int,int); 调用普通函数 max(cha,cha); //invoke function: char max(char,char);调用模板函数 max(num,cha);//invoke function: int max(int,int);此时强制类型转换 }
被模板函数overload
- 与普通函数之间的overload一样
template <class T> T max(T a, T b) { return (a>b)? a:b; } template <class T> T max(T a, T b, T c) { //return the biggest value of a, b and c }