ATL中的集合和枚举 一[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 firingme 的 blog

atl中的集合和枚举    

com集合枚举器的关系非常类似于stl中的容器迭代器的关系。

枚举器

如果一个com对象可以被称为一个“集合”,那么很显然,该对象内部肯定是一些类型相同的数据的集合,当我们要将内部这些数据“暴露”给客户端使用时,如果直接照搬stl的模式,提供一个iterator型别,那么会造成服务器端的数据封装得太弱,数据易被客户端破坏。鉴于此,com提供了枚举器供客户使用——客户通过集合的接口,取得枚举器的接口,使用枚举器访问数据;除开枚举器接口以外,一般的集合对象还要提供get__item方法暴露自身数据。

假设icollection接口支持枚举器ienumsth,那么通过如下代码得到枚举器接口,枚举内部元素:

hresult  hres ;

ienumsth psth ;

hres = icollection->get__newenum( (iunknown**) &psth ) ;

我们的程序中并没有提供ienumsth的声明,com规定了,凡是ienumxxx类型的接口,都需要用有如下个方法:nextskipresetclone。很明显,get__newenum()方法的作用就是构造出一个对象(下面称其为枚举器对象),该对象实现了上面所列的4个方法,然后将该对象的接口指针返回给客户端即可。

atl提供了一个枚举器对象的通用实现模板,极大的方便了我们的工作。该枚举器对象模板的设计思想是“基于策略”的,让我们首先来看看要实现该模板,需要有哪些策略:

1、  枚举器接口的名字——也就是上面例子中的ienumsth

本文关键:ATL 集合 枚举
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top