IEnumOnSTLImpl 类
此类定义基于 C++ 标准库集合的枚举器接口。
语法
template <class Base,
const IID* piid, class T, class Copy, class CollType>
class ATL_NO_VTABLE IEnumOnSTLImpl : public Base
参数
Base
COM 枚举器。 有关示例,请参阅 IEnumString。
piid
指向枚举器接口的接口 ID 的指针。
T
枚举器接口公开的项的类型。
复制
复制策略类。
CollType
C++ 标准库容器类。
成员
公共方法
名称 | 描述 |
---|---|
IEnumOnSTLImpl::Clone | Clone 的实现。 |
IEnumOnSTLImpl::Init | 初始化枚举器。 |
IEnumOnSTLImpl::Next | Next 的实现。 |
IEnumOnSTLImpl::Reset | Reset 的实现。 |
IEnumOnSTLImpl::Skip | Skip 的实现。 |
公共数据成员
“属性” | 描述 |
---|---|
IEnumOnSTLImpl::m_iter | 迭代器,表示枚举器在集合中的当前位置。 |
IEnumOnSTLImpl::m_pcollection | 一个指向 C++ 标准库容器的指针,该容器中包含要枚举的项。 |
IEnumOnSTLImpl::m_spUnk | 提供集合的对象的 IUnknown 指针。 |
备注
IEnumOnSTLImpl
提供 COM 枚举器接口的实现,其中的枚举项存储在与 C++ 标准库兼容的容器中。 此类类似于 CComEnumImpl 类,后者提供基于数组的枚举器接口的实现。
注意
请参阅 CComEnumImpl::Init,详细了解 CComEnumImpl
和 IEnumOnSTLImpl
的更多差异。
通常,你不需要通过从此接口实现派生来创建自己的枚举器类。 如果要使用 ATL 提供的基于 C++ 标准库容器的枚举器,则更为常见的做法是创建 CComEnumOnSTL 实例,或者创建一个集合类,该集合类通过从 ICollectionOnSTLImpl 进行派生来返回枚举器。
但是,如果你确实需要提供自定义枚举器(例如,除了公开枚举器接口之外还公开其他接口的枚举器),可以从此类进行派生。 在这种情况下,你可能需要重写 Clone 方法以提供自己的实现。
继承层次结构
Base
IEnumOnSTLImpl
要求
标头:atlcom.h
IEnumOnSTLImpl::Init
初始化枚举器。
HRESULT Init(
IUnknown* pUnkForRelease,
CollType& collection);
参数
pUnkForRelease
[in] 在枚举器的生存期内必须保持活动状态的对象的 IUnknown
指针。 如果不存在此类对象,则传递 NULL。
collection
对包含要枚举的项的 C++ 标准库容器的引用。
返回值
标准 HRESULT 值。
备注
如果为 Init
传递一个对另一对象中保存的集合的引用,则可以使用 pUnkForRelease 参数来确保该对象及其保存的集合可供枚举器使用,只要枚举器需要。
在将指向枚举器接口的指针传回任何客户端之前必须调用此方法。
IEnumOnSTLImpl::Clone
此方法通过创建 CComEnumOnSTL
类型的对象,以当前对象使用的集合和迭代器初始化该对象,并返回新建对象上的接口,来提供 Clone 方法的实现。
STDMETHOD(Clone)(Base** ppEnum);
参数
ppEnum
[out] 从当前枚举器克隆的新建对象上的枚举器接口。
返回值
标准 HRESULT 值。
IEnumOnSTLImpl::m_spUnk
提供集合的对象的 IUnknown
指针。
CComPtr<IUnknown> m_spUnk;
备注
此智能指针保留传递给 IEnumOnSTLImpl::Init 的对象上的引用,确保该对象在枚举器的生存期内保持活动状态。
IEnumOnSTLImpl::m_pcollection
此成员指向一个集合,该集合提供的特定数据可驱动枚举器接口的实现。
CollType* m_pcollection;
注解
可通过调用 IEnumOnSTLImpl::Init 将此成员初始化。
IEnumOnSTLImpl::m_iter
此成员保存用于标记集合中的当前位置并导航到后续元素的迭代器。
CollType::iterator m_iter;
IEnumOnSTLImpl::Next
此方法提供 Next 方法的实现。
STDMETHOD(Next)(
ULONG celt,
T* rgelt,
ULONG* pceltFetched);
参数
celt
[in] 请求的元素数。
rgelt
[out] 要用元素填充的数组。
pceltFetched
[out] rgelt 中实际返回的元素数。 如果列表中剩余的元素数少于 celt,则此参数可以小于 celt。
返回值
标准 HRESULT 值。
IEnumOnSTLImpl::Reset
此方法提供 Reset 方法的实现。
STDMETHOD(Reset)(void);
返回值
标准 HRESULT 值。
IEnumOnSTLImpl::Skip
此方法提供 Skip 方法的实现。
STDMETHOD(Skip)(ULONG celt);
参数
celt
[in] 要跳过的元素数目。
返回值
标准 HRESULT 值。