免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: converse
打印 上一主题 下一主题

正在写一个库... [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-12-31 11:11 |只看该作者
引来好多大牛,顺祝C版的兄弟姐妹新年快乐,睡觉睡到自然醒,数钱数到手抽筋^^

论坛徽章:
0
22 [报告]
发表于 2006-12-31 11:18 |只看该作者
原帖由 飞灰橙 于 2006-12-31 11:06 发表


在我看来,用宏是实现范型C唯一可行的方法。
用void *可能带来无尽的苦楚


不尽然哦.

我的理论如下:
STL里面用范型最多的地方是赋值和比较是否相等这两个操作.
我的替换方案是用memcpy来代替赋值操作,用memcmp来替代比较是否相等的操作.
当然前提是知道这个类型数据的大小.

其他的,如C++中的+, -, >=, <= , >, < 等操作没有办法支持了.
因为如果要支持的话涉及到重载,那就很复杂了,无穷无尽的类型需要支持.

也就是说,现在我所谓的"支持范型"仅仅用于支持operator =和operator == 两个操作符,而且参数都是同一个类型的.

论坛徽章:
0
23 [报告]
发表于 2006-12-31 11:42 |只看该作者
顶你个肺
留名

论坛徽章:
0
24 [报告]
发表于 2006-12-31 11:48 |只看该作者

  1. /********************************************************************
  2.         created:        2006/12/30
  3.         filename:         cgl_valuer.h
  4.         author:                Lichuang
  5.                
  6.         purpose:        Providing generic assign and compare function
  7.                                 for CGL
  8. *********************************************************************/

  9. #ifndef __CGL_VALUER_H__
  10. #define __CGL_VALUER_H__

  11. #include "cgl_commondef.h"

  12. CGL_BEGIN

  13. typedef struct valuer valuer;

  14. struct valuer
  15. {
  16.         size_t                nValueSize;

  17.         value_type        (*assign)(value_type data, value_type value, valuer *pValuer);
  18.         int                        (*compare)(value_type data1, value_type data2, valuer *pValuer);
  19. };

  20. extern void valuer_ctor(valuer *pValuer, size_t nValueSize);

  21. CGL_END

  22. #endif        /* __CGL_VALUER_H__ */

复制代码



  1. /********************************************************************
  2.         created:        2006/12/30
  3.         filename:         cgl_valuer.c
  4.         author:                Lichuang
  5.                
  6.         purpose:       
  7. *********************************************************************/

  8. #include "cgl_valuer.h"
  9. #include <string.h>

  10. CGL_BEGIN

  11. static        int                        compare(value_type data1, value_type data2, valuer *pValuer);
  12. static        value_type        assign(value_type data, value_type value, valuer *pValuer);

  13. void
  14. valuer_ctor(valuer *pValuer, size_t nValueSize)
  15. {
  16.         if (NULL == pValuer)
  17.                 return;

  18.         pValuer->nValueSize = nValueSize;

  19.         pValuer->assign                = assign;
  20.         pValuer->compare        = compare;
  21. }

  22. static value_type
  23. assign(value_type data, value_type value, valuer *pValuer)
  24. {
  25.         if (INVALID_VALUE == pValuer)
  26.                 return INVALID_VALUE;

  27.         return memcpy(data, value, pValuer->nValueSize);
  28. }

  29. static int       
  30. compare(value_type data1, value_type data2, valuer *pValuer)
  31. {
  32.         if (INVALID_VALUE == pValuer)
  33.                 return INVALID_RESULT;

  34.         return memcmp(data1, data2, pValuer->nValueSize);
  35. }

  36. CGL_END

复制代码


这个就是用于提供范型支持的struct, value_type是void*,初始化的时候传入一个这个struct的指针和所要支持的类型的数据长度就可以了.

想法和实现都很简单,欢迎板砖.

[ 本帖最后由 converse 于 2006-12-31 11:49 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2006-12-31 13:00 |只看该作者
实现C的模版库么?

论坛徽章:
0
26 [报告]
发表于 2006-12-31 13:04 |只看该作者
C中能用的算法库确实很少,C++中就很多了,专门有个arithmetic库。
期待楼主的库出炉啊~~

论坛徽章:
0
27 [报告]
发表于 2006-12-31 14:09 |只看该作者
C不支持重载运算符, 于是vector就不好用[]访问了

论坛徽章:
0
28 [报告]
发表于 2006-12-31 14:17 |只看该作者
任重而道远呀.
有个细节想问一下,楼主打算实现stl中的auto_ptr吗?

论坛徽章:
0
29 [报告]
发表于 2006-12-31 14:27 |只看该作者
原帖由 yulc 于 2006-12-31 14:17 发表
任重而道远呀.
有个细节想问一下,楼主打算实现stl中的auto_ptr吗?


暂时没有打算吧,因为这个不是最重要的部分,我开始的时候也没有把这一部分考虑进去.

现在只想着怎么把STL的几个组件:内存管理器,迭代器,容器,算法,仿函数实现了,这样似乎已经足够了.

论坛徽章:
0
30 [报告]
发表于 2006-12-31 16:32 |只看该作者
原帖由 win_hate 于 2006-12-31 01:10 发表



好久没上来,冒个泡先。

sleep(some minutes);

printf ("%s\n", "Happy 2007!";

.......

好久没见老大来这儿冒泡了
Happy new year!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP