Partilhar via


Classe CComEnumOnSTL

Essa classe define um objeto de enumerador COM baseado 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
    Um enumerador de COM (IEnumXXXX) interface.

  • piid
    Um ponteiro para a ID da interface do enumerador.

  • T
    O tipo de item exposto pela interface do enumerador.

  • Copy
    A copiar diretiva classe.

  • CollType
    Uma classe de contêiner STL.

Comentários

CComEnumOnSTL define um objeto de enumerador COM base em uma coleção de STL. Essa classe pode ser usada sozinho ou em conjunto com ICollectionOnSTLImpl.Etapas típicas para usar essa classe são descritas a seguir.Para obter mais informações, consulte ATL coleções e enumeradores.

Para usar essa classe com ICollectionOnSTLImpl:

  • typedef uma especialização dessa classe.

  • Use o typedef sistema autônomo o argumento final modelo em uma especialização de ICollectionOnSTLImpl.

See ATL coleções e enumeradores para obter um exemplo.

Para usar essa classe independentemente ICollectionOnSTLImpl:

  • typedef uma especialização dessa classe.

  • Use o typedef sistema autônomo argumento em uma especialização de modelo CComObject.

  • Criar uma instância do CComObject especialização.

  • Inicializar o objeto enumerador chamando IEnumOnSTLImpl::Init.

  • Retorne a interface do enumerador para o cliente.

Requisitos

Cabeçalho: atlcom.h

Exemplo

O código mostrado a seguir fornece uma função genérica para gerenciar a criação e inicialização de um 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 função do modelo pode ser usada para implementar o _NewEnum propriedade de uma interface de coleção sistema autônomo mostrado 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 um typedef para CComEnumOnSTL que expõe um vetor de CComVariants por meio da IEnumVariant interface.The CVariantCollection classe simplesmente especializada CreateSTLEnumerator para trabalhar com objetos do enumerador desse tipo.

Consulte também

Tarefas

Exemplo de ATLCollections: Demonstra ICollectionOnSTLImpl, CComEnumOnSTL e classes de diretiva de Copiar Personalizars

Referência

Classe CComObjectRootEx

CComObjectThreadModel

Classe IEnumOnSTLImpl

Outros recursos

CComEnumOnSTL membros

Visão geral do ATL classe