函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计,函数模板的定义如下:
template<模板参数表>
返回类型 函数名 (形式参数表)
{
.......;//函数体
}
<模板参数表>尖括号中不能为空,参数可以有多个,用逗号分开,模板参数主要是模板类型参数。
模板类型参数代表一种类型,由关键字class或typename(建议用typename)后加一个标识符构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个潜在的内置或用户设计类型。
如下所示:
- template<typename T> //class typename
- T Max(T a, T b)
- {
- cout << "a type" << typeid(a).name() << endl;
- cout << "T type" << typeid(T).name() << endl; //对类型进行识别
- return a > b ? a : b;
- }
-
-
- int main()
- {
- cout << Max(12, 23) << endl;
- cout << Max('a','b') << endl;
- cout << Max(12.23,34.45) << endl;
-
- }
函数模板根据一组实际类型或值构造出独立的函数的过程通常是隐式发生的,称为模板实参推演。
- template<typename T,int N>
- void PrintAr(T (&br)[N])
- {
- cout << sizeof(br) << endl;
- }
-
- int main()
- {
- int ar[10] = { 1,2,3,4,5,6,7};
- double dx = {1.2,2.3,3.4,4.5,5.6};
- //typename +elemnum;
- PrintAr(ar);
- PrintAr(dx);
- return 0;
- }

