节省程序员的精力了当然是。。。比如写一个排序算法。。。如果不用模板函数的话要像下边这样。对每种数据类型都要写一个函数。void sort(int data[],int n) ; //整型排序void sort(double data[],int n); //双精度型排序void sor(float data[] ,int n); //浮点型排序……而用模板,只需要写一个模板函数就可以了template<class T>void sort(T data[],int n);
模版算是C++的独有特性吧,也算是C++中比较难的地方,我平时开发的时候用的非常少,或者几乎没有用到,需要模版的地方是能看懂框架中相关的代码;
模版函数相对还是很简单的,引入模版的目的在于代码的重用;比如算法相似,但是由于数据类型不同,我们不得不把同样的一份代码拷贝两次,而仅仅是为了修改数据类型,那么在引入了函数模版之后,我们可以仅仅用一份代码而表示不同重载函数。
下面介绍一下最简单的函数模版的应用:
template <typename T> //定义一个抽象的数据类型T
T myMax(T a, T b) { //声明函数模板
return a > b ? a : b;
}
int main () {
int a = 2;
int b = 3;
std::cout<<myMax(a, b)<<std::endl; //动态生成函数 int myMax(int , int)
float c = 2.0f;
float d = 3.0f;
std::cout<<myMax(c, d)<<std::endl; //动态生成函数 flota myMax(float, float)
}
代码在第一次调用myMax()函数时,其参数都是int型,则编译器推导模板参数T为int,编译器会以函数模板为样板,以实际类型int代替函数模板中的抽象类型T,自动为这个函数调用生成一个int类型的版本。