CComEnumOnSTL选件类

此选件类定义了基于STL集合的COM enumerator对象。

template <
   class Base,
   const IID* piid,
   class T,
   class Copy,
   class CollType,
   class ThreadModel = CComObjectThreadModel
>
class ATL_NO_VTABLE CComEnumOnSTL :
   public IEnumOnSTLImpl<Base, piid, T, Copy, CollType>,
   public CComObjectRootEx< ThreadModel >

参数

  • Base
    COM枚举器 (IEnumXXXX) 接口。

  • piid
    对枚举器接口的接口ID的指针。

  • T
    枚举器接口显示的项的类型。

  • Copy
    复制策略 选件类。

  • CollType
    STL容器选件类。

备注

CComEnumOnSTL 定义基于STL集合的COM enumerator对象。 此选件类可以使用自己的或与 ICollectionOnSTLImpl结合使用。 典型的步骤来使用此选件类下面概述。 有关更多信息,请参见 ATL 集合和枚举数

使用ICollectionOnSTLImpl的此选件类:

  • typedef 此选件类的专用化。

  • 使用 typedef 为最终模板参数在 ICollectionOnSTLImpl的专用化。

有关示例 ATL 集合和枚举数 参见。

独立ICollectionOnSTLImpl使用此选件类:

  • typedef 此选件类的专用化。

  • 使用 typedef 用作模板参数在 CComObject的专用化。

  • 创建 CComObject 专用化的实例。

  • 通过调用 IEnumOnSTLImpl::Init初始化枚举数对象。

  • 返回枚举数接口到客户端。

继承层次结构

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

要求

Header: atlcom.h

示例

如下所示的代码提供泛型函数处理enumerator对象的创建和初始化:

template <class EnumType, class CollType>
HRESULT CreateSTLEnumerator(IUnknown** ppUnk, IUnknown* pUnkForRelease, 
   CollType& collection)
{
   if (ppUnk == NULL)
      return E_POINTER;
   *ppUnk = NULL;

   CComObject<EnumType>* pEnum = NULL;
   HRESULT hr = CComObject<EnumType>::CreateInstance(&pEnum);

   if (FAILED(hr))
      return hr;

   hr = pEnum->Init(pUnkForRelease, collection);

   if (SUCCEEDED(hr))
      hr = pEnum->QueryInterface(ppUnk);

   if (FAILED(hr))
      delete pEnum;

   return hr;
} // CreateSTLEnumerator

此模板函数来实现集合接口的 _NewEnum 属性如下所示:

typedef CComEnumOnSTL<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT>,
   std::vector<CComVariant> > VarVarEnum;

class ATL_NO_VTABLE CVariantCollection :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CVariantCollection, &CLSID_VariantCollection>,
   public IDispatchImpl<IVariantCollection, &IID_IVariantCollection, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   std::vector<CComVariant> m_vec;

   STDMETHOD(get__NewEnum)(IUnknown** ppUnk)
   {
      return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec);
   }

   // Remainder of class declaration omitted.

通过 IEnumVariant 接口公开 CComVariant的矢量的此代码创建 CComEnumOnSTL 的 typedef。 CVariantCollection 选件类专用 CreateSTLEnumerator 与此类型一起使用枚举数对象。

请参见

参考

IEnumOnSTLImpl

CComObjectRootEx选件类

CComObjectThreadModel

IEnumOnSTLImpl选件类

概念

ATLCollections示例:演示ICollectionOnSTLImpl、CComEnumOnSTL和自定义复制策略类选件

其他资源

ATL选件类概述