Compartilhar via


Classe de CComEnumOnSTL

Esta classe define um objeto enumerator COM com base em uma coleção de STL.

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
    Uma interface de enumerador COM (IEnumXXXX).

  • piid
    Um ponteiro para o interface identificação da interface de enumeração.

  • T
    O tipo de item exposto pela interface de enumeração.

  • Copy
    Uma classe de diretiva de impressão .

  • CollType
    Uma classe do contêiner de STL.

Comentários

CComEnumOnSTL define um objeto enumerator COM com base em uma coleção de STL.Essa classe pode ser usada em seus próprios ou em conjunto com ICollectionOnSTLImpl.As etapas típicas para usar essa classe são descritas abaixo.Para obter mais informações, consulte coleções e enumeradores de ATL.

Para usar esta classe com ICollectionOnSTLImpl:

  • typedef uma especialização de essa classe.

  • Use typedef como o argumento final do modelo em uma especialização de ICollectionOnSTLImpl.

coleções e enumeradores de ATL consulte para um exemplo.

Para usar esta classe independentemente de ICollectionOnSTLImpl:

  • typedef uma especialização de essa classe.

  • Use typedef como o argumento do modelo em uma especialização de CComObject.

  • Crie uma instância de especialização de CComObject .

  • Inicializar o objeto enumerator chamando IEnumOnSTLImpl::Init.

  • Retornar a interface do enumerador para o cliente.

Hierarquia de herança

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Requisitos

Cabeçalho: atlcom.h

Exemplo

O código mostrado abaixo fornece uma função genérico para manipular a criação e a inicialização de um objeto 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

Essa função de modelo pode ser usada para implementar como mostrado a propriedade de _NewEnum de uma interface de coleção abaixo:

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.

Esse código cria typedef para CComEnumOnSTL que expõe um vetor de CComVariants por meio da interface de IEnumVariant .A classe de CVariantCollection especializa simplesmente CreateSTLEnumerator para trabalhar com objetos de enumerador de esse tipo.

Consulte também

Referência

Classe de CComObjectRootEx

CComObjectThreadModel

Classe de IEnumOnSTLImpl

IEnumOnSTLImpl

Conceitos

exemplo de ATLCollections: Demonstra ICollectionOnSTLImpl, CComEnumOnSTL, e classes personalizadas da diretiva de impressão

Outros recursos

Visão geral da classe de ATL