在 C 语言中实现模板函数的方法

现以一个求和函数 Sum 为例,用 C++ Template 可写如下:

如果不是内置类型,该模板隐式地需要 R R::operator+=(T)运算符可用。

三种使用 C 语言模拟C++的模板的方法

1.    使用函数指针作为 Functor 替换者

2.    用宏作为Functor的替换者

3.    所有可替换参数均为宏

至少需要一个额外的文件(实现文件) impsum.c

总结:

第一种方法,易于跟踪调试,但是效率低下,适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂),模板函数(Sum)本身很复杂,模板参数也比较复杂(add)的场合。

第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此。

第三种方法,是我最近几天才想出的,我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试。在模板函数本身很复杂,而模板参数比较简单时更为优越。但是,可能有点繁琐。

 

一般情况下,没有必要做如此劳心的工作,一切交给编译器去做就行了。但是本人在开发一个文件系统时,由于是基于一种少见的平台,没有可用的C++编译器,有几个函数,除了其中的类型不同(uint16uint32),和几个可参数化的宏不同,其它地方完全相同,而函数本身很复杂(两百多行代码)。Copy出几个完全类似的函数副本,维护起来特别烦人。非常需要如此的编程模式,故此,分享出来,大家共同探讨。

作者:
该日志由 csdn-whinah 于2004年06月07日发表在C++分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: 在 C 语言中实现模板函数的方法
标签:
【上一篇】
【下一篇】

您可能感兴趣的文章:

8 个回复

  1. boluor1987说道:

    引用了您的文章,请看:http://www.boluor.com/?p=81 . 如果不希望,请告诉我。

  2. whinah说道:

    这里是我写的一个工业级代码,使用并精化了这种技术
    http://blog.csdn.net/whinah/archive/2009/05/26/4218292.aspx
    更多的见:
    http://code.google.com/p/febird

  3. hgzZuChang说道:

    请问方法三种为什么要有addint啊?各种类型的加法直接用+=不就行了吗?我是新手,认识还比较浅,失礼了。

  4. asfaohgah说道:

    楼主发文章不错
    但是你贴的代码自己测试过么 第三种方法的代码 我没调通 还有Read函数的头文件是哪个

发表评论

您必须 登录 后才能发表评论。