|
用函数模板实现和优化抽象操作 原文出处:Optimize Abstract Operations with Function Templates
在创建完成抽象操作的函数时,如:拷贝,反转和排序,你必须定义多个版本以便能处理每一种数据类型。以 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;
}
这样不但重复劳动,容易出错,而且还带来很大的维护和调试工作量。更糟的是,即使你在程序中不使用某个版本,其代码仍然增加可执行文件的大小,大多数编译器将不会从可执行文件中删除未引用的函数。 // file max.h
#ifndef MAX_INCLUDED
#define MAX_INCLUDED
template <class T> T max(T t1, T t2)
{
return (t1 > t2) ? t1 : t2;
}
#endif
<class T> 定义 T 作为模板参数,或者是占位符,当实例化 max()时,它将替代具体的数据类型。max 是函数名,t1和t2是其参数,返回值的类型为 T。你可以像使用普通的函数那样使用这个 max()。编译器按照所使用的数据类型自动产生相应的模板特化,或者说是实例: int n=10,m=16; int highest = max(n,m); // 产生 int 版本 std::complex<double> c1, c2; //.. 给 c1,c2 赋值 std::complex<double> higher=max(c1,c2); // complex 版本 第二步:改进设计 template <class T> T max(const T& t1, const T& t2)
{
return (t1 > t2) ? t1 : t2;
}
额外的性能问题 unsigned int htonl (unsigned int hostlong); unsigned short htons (unsigned short hostshort); unsigned int ntohl (unsigned int netlong); unsigned short ntohs (unsigned short netshort); 这些函数实现相同的操作:反转多字节值的字节。其唯一的差别是方向性以及参数的大小。非常适合模板化。使用一个模板函数来替代这四个函数,我们可以定义一个聪明的模板,它会处理所有这四种情况以及更多种情形: template <class T> T byte_reverse(T val); 为了确定 T 实际的类型,我们使用 sizeof 操作符。此外,我们还使用 STL 的 std::reverse 算法来反转值的字节: template <class T> T byte_reverse(T val)
{
// 将 val 作为字节流
unsigned char *p=reinterpret_cast<unsigned char*> (&val);
std::reverse(p, p+sizeof(val));
return val;
}
使用方法 int main()
{
int n=1;
short k=1;
__int64 j=2, i;
int m=byte_reverse(n);// reverse int
int z=byte_reverse(k);// reverse short
k=byte_reverse(k); // un-reverse k
i=byte_reverse(j); // reverse __int64
}
注:模板使用不当会影响.exe 文件的大小,也就是常见的代码浮肿问题。 |
背景:
阅读新闻
用函数模板实现和优化抽象操作
| [日期:2005-12-29] | 作者: | [字体:大 中 小] |
阅读: 次
【 打印 】
【 打印 】
相关新闻
相关关键词:
全站导航
作者简介
gmail.com