免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1076 | 回复: 3
打印 上一主题 下一主题

Map 求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-02 12:07 |只看该作者 |倒序浏览
template <
typename KEY,
typename VALUE,
typename IMPL
>
class Map
{
public:
typedef MapEntry<KEY, VALUE> Entry;
typedef typename IMPL::iterator Cursor;
typedef typename IMPL::const_iterator ConstCursor;
typedef AssociativeIteratorImpl<Entry, IMPL> Iterator;
typedef ConstIteratorImpl<const Entry, IMPL> ConstIterator;
typedef KeyIteratorImpl<const KEY, IMPL> KeyIterator;
typedef ConstKeyIteratorImpl<const KEY, IMPL> ConstKeyIterator;
typedef ValueIteratorImpl<VALUE, IMPL> ValueIterator;
typedef ConstValueIteratorImpl<const VALUE, IMPL> ConstValueIterator;

protected:
IMPL _impl;

其中 IMPL 是什么东西啊。一般用的时候我是直接Map<int,value>, 不用那个IMPL的。
高人指点~~

论坛徽章:
0
2 [报告]
发表于 2005-11-02 12:21 |只看该作者
IMPL就是IMPLEMENTATION,Map仅仅是表现了一个接口,比如它定义的insert等操作。具体实现可以采用数组、可以采用链表、可以采用树等数据结构,

就像你定义一个
template <typename elementType>
class Array
{
public:
   void Append(const elementType& element);
   int Find(const elementType& element);
   
private:
  ...
};

这里面,最简单的情况,使用一个数组来存储实际的数据,或者也可以使用一个链表,而你的Array类的对外的接口---也就是类所提供的public成员函数是一定的,但他的内部实现是不确定的。

这个具体的实现,被抽象成了IMPL,然后作为一个容器对象,为其提供了Allocator, Iterator,等东西。

不知道你这是从哪里看到的,但这和你通常用的东西根本就没关系,你通常用的是stl提供的map类模板,而你所说的应当是一个自定义的东西。

论坛徽章:
0
3 [报告]
发表于 2005-11-02 12:23 |只看该作者
这是STL的实现代码部分.
impl是具体的实现.一般不写STL module的话,不用关心这些.
想知道具体细节的话,打开source code自己看.

论坛徽章:
0
4 [报告]
发表于 2005-11-02 12:27 |只看该作者
可以参考一下设计模式,这是一个Bridge模式
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP