标签:
在函数(上)里介绍了函数的重载,但是为每个需要重载的函数编写多个函数实体是尤为麻烦的。这里可以用到一个名为函数模板的的形式来优化代码。
函数模板形式:
关键字 class把T标识为一个类型
?
template < class T > T larger(T a,Tb)
?
关键字template把这段代码标识为模板
?
然后就可以在其他函数中实例化这个模板。一般来说,编译器会推断出函数需要实例化哪个版本的函数。但是有时也会推断错误,特别是有多个模板参数的时候,且容易造成内存占用过大。
所以在调用的时候可以显示的指定模板参数。
Larger<long>(value1,value2)<<endl;
这可以帮助编译器做出理想的决策,也可以转换不同类型的参数,适应于函数模板。
模板参数是引用类型的说明:
假如用地址参数调用函数large()——*larger(&a,&b),编译器会创建一个模板参数是long*的函数版本,这个函数的原型如下:long* larger(long*,long*)
但是这样的函数题生成的函数如下所示:
long* larger(long* a,long* b)
{
return a>b?a:b
};
这是在比较地址,而不是值。
所以我们要重新定义一个模板的说明
template<> long* larger<long*>(long *a,long* b)
{
return *a>*b?a:b;
}
带有多个参数的模板:用于解决函数的参数类型可能与返回类型不同的问题
?
?
?
?
——内容来自Horton的c++入门经典
标签:
原文地址:http://www.cnblogs.com/Daringoo/p/4400952.html