Condividi tramite


Classe CComEnumOnSTL

Questa classe definisce un oggetto enumeratore COM basato su una raccolta di librerie standard C++.

Sintassi

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
Enumeratore COM. Per un esempio, vedere IEnumString .

piid
Puntatore all'ID interfaccia dell'interfaccia dell'enumeratore.

T
Tipo di elemento esposto dall'interfaccia dell'enumeratore.

Copia
Classe di criteri di copia.

CollType
Classe contenitore della libreria standard C++.

Osservazioni:

CComEnumOnSTL definisce un oggetto enumeratore COM basato su una raccolta di librerie standard C++. Questa classe può essere usata autonomamente o insieme a ICollectionOnSTLImpl. Di seguito sono descritti i passaggi tipici per l'uso di questa classe. Per altre informazioni, vedere Raccolte e enumeratori ATL.

Per usare questa classe con ICollectionOnSTLImpl:

  • typedef una specializzazione di questa classe.

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

Per un esempio, vedere Raccolte e enumeratori ATL.

Per usare questa classe indipendentemente da ICollectionOnSTLImpl:

  • typedef una specializzazione di questa classe.

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

  • Creare un'istanza della CComObject specializzazione.

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

  • Restituire l'interfaccia dell'enumeratore al client.

Gerarchia di ereditarietà

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Requisiti

Intestazione: atlcom.h

Esempio

Il codice riportato di seguito fornisce una funzione generica per gestire la creazione e l'inizializzazione di un oggetto enumeratore:

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

Questo modello di funzione può essere usato per implementare la proprietà di un'interfaccia _NewEnum 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 un typedef oggetto per CComEnumOnSTL che espone un vettore di CComVariants tramite l'interfaccia IEnumVariant . La CVariantCollection classe è semplicemente specializzata CreateSTLEnumerator per lavorare con gli oggetti enumeratore di questo tipo.

Vedi anche

IEnumOnSTLImpl
Esempio ATLCollections: illustra le classi di criteri di copia personalizzate ICollectionOnSTLImpl, CComEnumOnSTL e ICollectionOnSTL
Cenni preliminari sulla classe
Classe CComObjectRootEx
CComObjectThreadModel
Classe IEnumOnSTLImpl