C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。
1)交换数据函数模板实例
#include <iostream> using namespace std; //template 关键字告诉C++编译器 我要开始泛型了.你不要随便报错 //数据类型T 参数化数据类型 template <typename T> void myswap(T &a, T &b) { T t; t= a; a= b; b= t; } void main() { int x = 1; int y = 2; myswap(x,y); //自动数据类型推导的方式 floata = 2.0; floatb = 3.0; myswap(a,b); //自动数据类型推导的方式 myswap<float>(a,b); //显示类型调用 return; }
2)排序在不确定类型的情况下,用函数模板解决
#include <iostream> using namespace std; template<typename T, typename T2> void sortArray(T *a, T2 num) { T tmp ; int i, j ; for (i=0; i<num; i++) { for (j=i+1; j<num; j++) { if (a[i] < a[j]) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } } template<class T> void pirntArray(T *a, int num) { int i = 0; for (i=0; i<num; i++) { cout<<a[i]<<" "; } } void main() { int num = 0; char a[] = "ddadeeettttt"; num = strlen(a); printf("排序之前\n"); pirntArray<char>(a, num); sortArray<char, int>(a, num); //显示类型调用 模板函数 <> printf("排序之后\n"); pirntArray<char>(a, num); cout<<"hello..."<<endl; system("pause"); return ; }