1.定义
可以使用class
或者typename
字段来申明
templatetemplate
2.作用
使用函数模版可以达到重载的目的,针对参数类型不同
但函数实现一致
的情况。
3.使用
#includeusing namespace std;namespace tmp{/*函数模版: T代表一种数据类型*/template T min(T x, T y){return (x < y)?x:y;} /*函数模版: T1和T2代表两种不同的数据类型*/template void max(T1 x, T2 y){cout << "T1="<< x << endl;cout << "T2="<< y << endl;}} int main(void){#if 0int a1 = 2, a2 = 4;double d1 = 1.3, d2 = 2.3;cout << "较小的整数:" << tmp::min(a1, a2) << endl;cout << "较小的实数:" << tmp::min(d1, d2) << endl;#endiftmp::max(3, 4.5);tmp::max("123", 3);return 0;}
4.原理
函数模板只是声明了一个函数的描述即模板,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型代替类型参数标识符之后,才能产生真正的函数。
5.应用规则
a. 寻找一个参数完全匹配的函数,若找到就调用它。若参数完全匹配的函数多于一个,则这个调用是一个错误的调用。
b. 寻找一个函数模板,若找到就将其实例化生成一个匹配的模板函数并调用它。
c. 若上面两条都失败,则使用函数重载的方法,通过类型转换产生参数匹配,若找到就调用它。
d. 若上面三条都失败,还没有找都匹配的函数,则这个调用是一个错误的调用。