WEB开发网
开发学院软件开发VC 用函数模板实现和优化抽象操作 阅读

用函数模板实现和优化抽象操作

 2007-03-15 21:55:19 来源:WEB开发网   
核心提示: unsigned int htonl (unsigned int hostlong);unsigned short htons (unsigned short hostshort);unsigned int ntohl (unsigned int netlong);unsigned sho
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;
}

使用方法

byte_reverse() 模板处理完全适用于所有情况。而且,它还可以不必修改任何代码而灵活地应用到其它原本(例如:64 位和128位)不支持的类型:

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 文件的大小,也就是常见的代码浮肿问题。

作者简介

Danny Kalev 是一名通过认证的系统分析师,专攻 C++ 和形式语言理论的软件工程师。1997 年到 2000 年期间,他是 C++ 标准委员会成员。最近他以优异成绩完成了他在普通语言学研究方面的硕士论文。 业余时间他喜欢听古典音乐,阅读维多利亚时期的文学作品,研究 Hittite、Basque 和 Irish Gaelic 这样的自然语言。其它兴趣包括考古和地理。Danny 时常到一些 C++ 论坛并定期为不同的 C++ 网站和杂志撰写文章。他还在教育机构讲授程序设计语言和应用语言课程。

上一页  1 2 3 

Tags:函数 模板 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接