Partilhar via


Classe CComEnumOnSTL

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe define um objeto enumerador COM baseado numa coleção de Biblioteca Padrão C++.

Sintaxe

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 COM. Veja IEnumString para um exemplo.

Piid
Um apontador para o ID da interface do enumerador.

T
O tipo de item exposto pela interface do enumerador.

Copy
Uma aula de política de cópia .

CollType
Uma classe de contentores de Biblioteca Padrão em C++.

Observações

CComEnumOnSTL define um objeto enumerador COM baseado numa coleção de Biblioteca Padrão C++. Esta classe pode ser usada isoladamente ou em conjunto com o ICollectionOnSTLImpl. Os passos típicos para utilizar esta aula são descritos abaixo. Para mais informações, consulte Coleções e Enumeradores ATL.

Para usar esta aula com ICollectionOnSTLImpl:

  • typedef uma especialização desta disciplina.

  • Use o typedef como argumento modelo final numa especialização de ICollectionOnSTLImpl.

Veja ATL Collections and Enumerators para um exemplo.

Para usar esta classe independentemente do ICollectionOnSTLImpl:

  • typedef uma especialização desta disciplina.

  • Use o typedef como argumento modelo numa especialização de CComObject.

  • Cria uma instância da CComObject especialização.

  • Inicialize o objeto enumerador chamando IEnumOnSTLImpl::Init.

  • Devolva a interface do enumerador ao cliente.

Hierarquia de herança

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Requerimentos

Cabeçalho: atlcom.h

Example

O código mostrado abaixo fornece uma função genérica para gerir 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

Este modelo de função pode ser usado para implementar a _NewEnum propriedade de uma interface de coleção, como 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.

Este código cria um typedef para CComEnumOnSTL que expõe um vetor de CComVariants por meio da IEnumVariant interface. A CVariantCollection classe especializa-se CreateSTLEnumerator simplesmente em trabalhar com objetos enumeradores deste tipo.

Consulte também

IEnumOnSTLImpl
ATLCollections Exemplo: Demonstra ICollectionOnSTLImpl, CComEnumOnSTL e Classes de Política de Cópias Personalizadas
Visão geral da classe
Classe CComObjectRootEx
CComObjectThreadModel
Classe IEnumOnSTLImpl