Clase de CComEnum

Esta clase define un objeto COM de enumerador basado en una matriz.

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 >

Parámetros

  • Base
    Una interfaz COM de enumerador ().

  • piid
    Un puntero al identificador de la interfaz de la interfaz del enumerador.

  • T
    El tipo de elemento expuesto por la interfaz del enumerador.

  • Copy
    clase de directiva de copiahomogéneo.

  • ThreadModel
    el modelo de subprocesos de la clase.Valor predeterminado de este parámetro al modelo de subproceso del objeto global utilizado en el proyecto.

Comentarios

CComEnum define un objeto COM de enumerador basado en una matriz.Esta clase es análoga a CComEnumOnSTL que implementa un enumerador basado en un contenedor de STL.Los pasos típicos para utilizar esta clase se describen a continuación.Para obtener más información, vea Colecciones y enumeradores ATL.

para utilizar esta clase:

  • typedef una especialización de esta clase.

  • Utilice typedef como argumento de plantilla en una especialización de CComObject.

  • Cree una instancia de especialización de CComObject .

  • Inicializa el objeto enumerator llamando a CComEnumImpl:: Iniciar.

  • Devuelve la interfaz del enumerador al cliente.

Jerarquía de herencia

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Requisitos

encabezado: atlcom.h

Ejemplo

El código muestra siguiente proporciona una función reutilizable para crear e inicializar un objeto de enumerador.

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

Esta función de plantilla se puede utilizar para implementar la propiedad de _NewEnum de una interfaz de intercalación como se muestra a continuación:

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.

Este código crea typedef para CComEnum que expone un vector de s para VARIANTa través de la interfaz de IEnumVariant .La clase de CVariantArrayCollection especializada simplemente CreateEnumerator para trabajar con objetos de enumeradores de este tipo y pasa los argumentos necesarios.

Vea también

Referencia

CComObjectThreadModel

Clase de CComEnumImpl

Clase de CComObjectRootEx

Otros recursos

Información general de la clase ATL