函数模板:
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个函数类型就称为函数模板。
具体表现:模板定义,
-
#include<iostream> using namespace std; template <typename T> T max( T a,T a, T c) { if(b>a) a = b; if(c>a) a = c; return a; } int main() { int i1 = 8,i2 =5 ,i3 = 6 ,i; double d1 = 56.9, d2 = 90.76, d3 = 43.1, d; long g1 = 32323,g g2 = 59899, g3 =133244, g; i = max(i1 ,i2 ,i3 ); d = max(d1, d2, d3); g = max(g1, g2, g3); cout <<"i_max = "<<i <<endl; cout <<"d_max = "<<d <<endl; cout <<"g_max = "<<g <<endl; return 0 }
其中的定义模板那里:
template <typename T> 函数定义 或 者template <class T>
template 含义是 模板,尖括号中先写关键字,typename(或class)后面跟一个类型参数T,这个类型参数实际上是一个虚拟的类型名,表示模板中出现的T是一个类型名,但是现在并未指定它是哪一种具体的类型。
class 和typename的作用相同,都是表示类型名,二者可以互换,以前的c++程序员都用class,新标准c++把typename加到标准c++中的,因为class很容易于c++中的类混淆,而用,typename 是不久前才被加到标准c++中的,而用typename的含义就很清楚,是类型名(而不是类名)。
类型参数也可以不止一个 template <typename T1,typename T2>
只适用于函数参数个数相同,而函数参数类型不同,且函数体相同的情况,如果函数的参数个数不同,则不能用函数模板。
整体来说,函数模板就是只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果函数的参数的个数不同,则不能用函数模板。