C++中函数模板的理解
一.函数模板(function Template)
所谓函数模板,实际上就是建立一个通用函数。
*函数定义时不指定具体的数据类型(使用虚拟类型代替),被调用时才知道数据的类型。
*函数被调用时编译器根据实参反推数据类型-类型的参数化。
形式如下
//模板头与函数声明/定义永远是不可分割的整体 template <typename 类型参数1 , 类型参数2 ,...> typename也可改为class,早期的C++是用class 返回值类型 函数名(形参列表){ //在函数体中可以使用类型参数 }
下面看一个小例子,用一个模板函数去实现不同类型的数据交换。
13 #include<iostream> 14 15 using namespace std; 16 //书写函数模板 17 template <typename T> void Swap(T& , T&); 18 19 int main(int argc , char **argv) 20 { 21 int a =3 , b = 5; 22 double c = 2.4 , d = 4.8; 23 cout << "交换前:"; 24 cout << a << '\t' << b << endl; 25 Swap(a , b); 26 cout << "排序后:"; 27 cout << a << '\t' << b << endl; 28 cout << "排序前:"; 29 cout << c << '\t' << d <<endl; 30 Swap(c , d); 31 cout << "排序后:"; 32 cout << c << '\t' << d <<endl; 33 34 return 0; 35 36 } 37 38 template <typename T> 39 void Swap(T &a , T &b) 40 { 41 T temp = a; 42 a = b; 43 b = temp; 44 }
模板函数适合函数结构一样或者类似,都可以兼容的,我们只需要给他传递不同的数据类型。
还有就是函数模板和函数重载并不是替换的关系,
函数模板适合用于函数名和函数结构一样,且都可以兼容的。
重载函数也是相同的函数名,但是他可以实现不同的业务需求。