C++中用函数模板实现和优化抽象操作
本文介绍了函数模板的概念和用途,以及如何创建和使用函数模板。......
当创建执行抽象操作(如复制、反转和排序)的函数时,必须定义多个版本,以便可以处理每种数据类型。以max()函数为例。它返回两个参数中较大的一个:
双max(双第一,双第二);
复数max(复数第一,复数第二);
date max(日期第一,日期第二);
//..此功能的其他版本
尽管对于不同的数据类型,该函数的实现是相同的,但是程序员必须为每种数据类型定义一个单独的版本:
double max(双第一,双第二)
{
return first > second?第一:第二;
}
复数max(复数第一,复数第二)
{
return first > second?第一:第二;
}
date max(date first,date second)
{
return first > second?第一:第二;
}
这不仅重复劳动,容易出错,也带来了大量的维护和调试工作量。更糟糕的是,即使你在程序中不使用某个版本,它的代码仍然会增加可执行文件的大小,而且大多数编译器不会从可执行文件中删除不被引用的函数。
用普通函数实现抽象操作,会迫使你定义多个函数实例,会产生大量的维护和调试费用。解决方法是使用函数模板,而不是普通函数。
使用功能模板
函数模板解决了以上所有问题。独立于类型,仅在需要时自动实例化。本文将展示如何定义一个函数模板来抽象一般操作,演示其用法并讨论优化技术。
第一步:定义
函数的声明是关键字template后面括号中的一个或多个模板的参数和原型。与普通函数相比,它通常在一个转换单元中声明,在另一个单元中定义。您可以在头文件中定义模板。例如:
//file MAX . h
# ifndef MAX _ INCLUDED
# define MAX _ INCLUDED
template < class T > T MAX(T t1,T t2)
{
return (t1 > t2)?t1:T2;
}
#endif
0条评论