![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||
| 在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载) | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-8-3 ![]() |
||||||
|
在Delphi中实现类型安全的容器 DGL库下载 安装方法:将库解压到一个目录,然后在Delphi中添加搜索路径
在构造一些容器和算法的时候,总是怀念C++的泛型和STL;所以就尝试在Delphi中编写泛型代码; 其它现有的Deplhi容器和算法库实现中,主要的实现途径有利用Delphi中的array of const(相当于弱类型,而且对结构的支持差,如Decal);或者建立一套类体系作为容器中的元素(主要使用虚函数机制,如:左轻侯有篇文章也谈到过; 一般简单类型需要做打包拆包);还有的实现是针对TObject、IInterface、String等做多套代码实现(如:DCL库); 但他们相对于C++的STL来说缺陷也很明显,类型不安全,速度慢,代码重复; DGL库没有这些问题,库能够支持所有基本类型、指针(包括类的指针)、Interface、结构(record)、Object结构(Delphi中已经不推荐使用)、类成员函数指针、类(class)的值语义(一般Delphi中不习惯使用类的值语义,所以不建议使用)等其它用户自定义类型,并且类型安全(速度当然没有问题啦), 没有重复代码!
<接口interface> _ISet Set接口 <类class> (_THashTableBase Hash表(库内部使用))
“模版”类的声明文件:UnitClassT.inc_h fucntion IsEqual(ATest:TTest):bool; [code] interface type _T = Pointer; {$I UnitClassT.inc_h} type TTestPointer = TTest; // TTestPointer定义给外部使用 {$I UnitClassT.inc_pas} function _T_IsEqual(cosnt a,b:_T); end.
interface type _T = double; type TTestFloat = TTest; // TTestFloat定义给外部使用 function _T_IsEqual(cosnt a,b:_T); implementation function _T_IsEqual(cosnt a,b:_T); {$I UnitClassT.inc_pas} end. (将类分成两个部分的原因是这样可以$Include更多的文件,形成组合;感觉象C++ ) 这里只对一个_T类型做了参数化,当然还可以对多个类型做特化;甚至参数化一些常量和其他函数(比如Hash值函数),利用$define\$ifdef进行条件编译(主要用来优化或特殊处理);用这种方法再加上接口(Interface,不是必须);在Delphi中就可以实现通用\高效\易用的容器和算法库了;
本文来源:http://blog.csdn.net/paulchenbo/archive/2007/07/06/1680736.aspx
|
||||||
| 文章录入:admin 责任编辑:admin | ||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|