此选件类定义了基于数组的COM enumerator对象。
template <
   class Base,
   const IID* piid,
   class T,
   class Copy,
   class ThreadModel = CcomObjectThreadModel
>
class ATL_NO_VTABLE CComEnum :
   public CComEnumImpl<Base, piid, T, Copy>,
   public CComObjectRootEx< ThreadModel >
参数
Base
COM枚举器 (IEnumXXXX) 接口。piid
对枚举器接口的接口ID的指针。T
枚举器接口显示的项的类型。Copy
同类 复制策略类选件。ThreadModel
选件类的线程模型。此参数默认为用于项目的全局对象线程模型。
备注
CComEnum 定义基于数组的COM enumerator对象。实现基于STL容器的枚举数的此选件类类似于 CComEnumOnSTL。典型的步骤来使用此选件类下面概述。有关更多信息,请参见 ATL 集合和枚举数。
使用此选件类:
typedef 此选件类的专用化。
使用 typedef 用作模板参数在 CComObject的专用化。
创建 CComObject 专用化的实例。
通过调用 CComEnumImpl::Init初始化枚举数对象。
返回枚举数接口到客户端。
继承层次结构
CComObjectRootBase
Base
CComEnum
要求
Header: atlcom.h
示例
如下所示的代码用于创建和初始化enumerator对象提供可重用的功能。
template <class EnumType, class ElementType>
HRESULT CreateEnumerator(IUnknown** ppUnk, ElementType* begin, ElementType* end,
   IUnknown* pUnk, CComEnumFlags flags)
{
   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(begin, end, pUnk, flags);
   if (SUCCEEDED(hr))
      hr = pEnum->QueryInterface(ppUnk);
   if (FAILED(hr))
      delete pEnum;
   return hr;
} // CreateEnumerator
此模板函数来实现集合接口的 _NewEnum 属性如下所示:
typedef CComEnum<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT> > VarArrEnum;
class ATL_NO_VTABLE CVariantArrayCollection :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CVariantArrayCollection, &CLSID_VariantArrayCollection>,
   public IDispatchImpl<IVariantArrayCollection, &IID_IVariantArrayCollection, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
VARIANT m_arr[3];
public:
    STDMETHOD(get__NewEnum)(IUnknown** ppUnk)
    {
        return CreateEnumerator<VarArrEnum>(ppUnk, &m_arr[0], &m_arr[3], this, 
           AtlFlagNoCopy);
    }
    // Remainder of class declaration omitted.
通过 IEnumVariant 接口公开 VARIANT的矢量的此代码创建 CComEnum 的 typedef。CVariantArrayCollection 选件类专用 CreateEnumerator 与此类型一起使用枚举数对象传递必需的参数。