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,详细了解 CComEnumImplIEnumOnSTLImpl 的更多差异。

通常,你不需要通过从此接口实现派生来创建自己的枚举器类。 如果要使用 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 值。

另请参阅

类概述