Condividi tramite


CComEnumOnSTL Class

Questa classe definisce un oggetto enumeratore COM basato su una raccolta 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 >

Parametri

  • Base
    Un'interfaccia dell'enumeratore COM ().

  • piid
    Un puntatore all'ID dell'interfaccia dell'enumeratore.

  • T
    Il tipo di elemento esposto dall'enumeratore.

  • Copy
    Una classe criteri di copia.

  • CollType
    Una classe di contenitori STL.

Note

CComEnumOnSTL definisce un oggetto enumeratore COM basato su una raccolta STL. Questa classe può essere utilizzata da sola o insieme a ICollectionOnSTLImpl. I passaggi comuni per l'utilizzo di tale classe sono descritti in. Per ulteriori informazioni, vedere Raccolte e enumeratori ATL.

Per utilizzare questa classe con ICollectionOnSTLImpl:

  • typedef una specializzazione di questa classe.

  • Utilizzare typedef come argomento di modello finale in una specializzazione ICollectionOnSTLImpl.

Vedere Raccolte e enumeratori ATL per un esempio.

Per utilizzare questa classe indipendentemente da ICollectionOnSTLImpl:

  • typedef una specializzazione di questa classe.

  • Utilizzare typedef come argomento di modello in una specializzazione CComObject.

  • Creare un'istanza della specializzazione CComObject.

  • Inizializzare l'oggetto enumeratore chiamando IEnumOnSTLImpl::Init.

  • Restituisce l'interfaccia dell'enumeratore al client.

Gerarchia di ereditarietà

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Requisiti

Header: atlcom.h

Esempio

Il codice riportato di seguito fornisce una funzione generica per gestire la creazione e l'inizializzazione di un oggetto 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

Questa funzione modello può essere utilizzata per implementare la proprietà _NewEnum di un'interfaccia di raccolta come illustrato di seguito:

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.

Questo codice crea typedef per CComEnumOnSTL che espone un vettore CComVariants per l'utilizzo dell'interfaccia IEnumVariant. La classe CVariantCollection specializza semplicemente CreateSTLEnumerator per l'utilizzo degli oggetti enumeratori di questo tipo.

Vedere anche

Riferimenti

IEnumOnSTLImpl

CComObjectRootEx Class

CComObjectThreadModel

IEnumOnSTLImpl Class

Concetti

Esempio ATLCollections: Dimostrazione di ICollectionOnSTLImpl, CComEnumOnSTL e di classi criteri di copia personalizzate

Altre risorse

ATL Class Overview