Compartir a través de


Clase CComEnumOnSTL

Esta clase define un objeto enumerador COM basado en una colección de bibliotecas estándar de C++.

Sintaxis

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>

Parámetros

Base
Enumerador COM. Consulte IEnumString para ver un ejemplo.

piid
Puntero al Id. de interfaz de la interfaz del enumerador.

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

Copiar
Una clase de directiva de copia.

CollType
Una clase contenedora de la Biblioteca estándar de C++.

Comentarios

CComEnumOnSTL define un objeto enumerador COM basado en una colección de bibliotecas estándar de C++. Esta clase se puede usar por sí misma o con ICollectionOnSTLImpl. Ahora se describen los pasos típicos para usar esta clase. Para más información, consulte Colecciones y enumeradores de ATL.

Para usar esta clase con ICollectionOnSTLImpl:

  • typedef una especialización de esta clase.

  • Use typedef como argumento de plantilla final en una especialización de ICollectionOnSTLImpl.

Consulte Colecciones y enumeradores de ATL para obtener un ejemplo.

Para usar esta clase independientemente de ICollectionOnSTLImpl:

  • typedef una especialización de esta clase.

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

  • Cree una instancia de la especialización CComObject.

  • Inicialice el objeto enumerador llamando a IEnumOnSTLImpl::Init.

  • Devuelve la interfaz del enumerador al cliente.

Jerarquía de herencia

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Requisitos

Encabezado: atlcom.h

Ejemplo

El código que se muestra a continuación proporciona una función genérica para controlar la creación e inicialización de un objeto enumerador:

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

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

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.

Este código crea un atributo typedef para CComEnumOnSTL que expone un vector de CComVariant a través de la interfaz IEnumVariant. La clase CVariantCollection simplemente especializa CreateSTLEnumerator para trabajar con objetos enumeradores de este tipo.

Consulte también

IEnumOnSTLImpl
Ejemplo de ATLCollections: muestra las clases de directiva de copia personalizada, ICollectionOnSTLImp y CComEnumOnSTL
Información general sobre la clase
CComObjectRootEx (clase)
CComObjectThreadModel
IEnumOnSTLImpl (clase)