itloverhpu

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1.什么是函数模板?

在创建完成抽象操作的函数时,如:拷贝,反转和排序,你必须定义多个版本以便能处理每一种数据类型。以 max() 函数为例,它返回两个参数中的较大者:double max(double first, double second);
complex max(complex first, complex second);
date max(date first, date second);
//..该函数的其它版本
尽管这个函数针对不同的数据类型其实现都是一样的,但程序员必须为每一种数据类型定义一个单独的版本:
double max(double first, double second)
{
return first>second? first : second;
}
complex max(complex first, complex second)
{
return first>second? first : second;
}
date max(date first, date second)
{
return first>second? first : second;
}
这样不但重复劳动,容易出错,而且还带来很大的维护和调试工作量。更糟的是,即使你在程序中不使用某个版本,其代码仍然增加可执行文件的大小,大多数编译器将不会从可执行文件中删除未引用的函数。
用普通函数来实现抽象操作会迫使你定义多个函数实例,从而招致不小的维护工作和调试开销。解决办法是使用函数模板代替普通函数。
2. 定义?
定义的一般形式:
template <class 数据类型参数标示符>
函数返回值类型 函数名(参数表) {
函数体
}
例如:
templat <class T1,class T2> T1 fun(T1 a,T2 b) { T2=d; 、、、、、、
}
如果主调函数中有:
int x; double y; fun(x,y); 则系统将用实参x的数据类型int和y的数据类型double的代替函数模板中的T1和T2,生成模板函数
int fun(int a,double b)
{ double d;
、、、、 }
书上例子:


posted on 2013-07-28 13:35  itloverhpu  阅读(213)  评论(0编辑  收藏  举报