Freigeben über


CComEnumOnSTL Class

Diese Klasse definiert ein COM-Enumeratorobjekt auf Grundlage einer STL-Auflistung.

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 >

Parameter

  • Base
    Eine COM-Enumerator (IEnumXXXX)-Schnittstelle.

  • piid
    Ein Zeiger auf den Schnittstellen-ID der Enumeratorschnittstelle.

  • T
    Der Typ des Elements verfügbar gemacht die Enumeratorschnittstelle.

  • Copy
    Eine Kopierrichtlinienklassen-Klasse.

  • CollType
    Eine STL-Containerklasse.

Hinweise

CComEnumOnSTL definiert ein COM-Enumeratorobjekt auf Grundlage einer STL-Auflistung. Diese Klasse kann allein oder in Verbindung mit ICollectionOnSTLImpl verwendet werden. Typische Schritte für die Verwendung dieser Klasse werden unten erläutert. Weitere Informationen finden Sie unter ATL-Auflistungen und -Enumeratoren.

Um diese Klasse mit ICollectionOnSTLImpl verwenden:

  • typedef eine Spezialisierung dieser Klasse.

  • Verwenden Sie typedef als das endgültige Vorlagenargument in einer Spezialisierung von ICollectionOnSTLImpl.

Siehe ATL-Auflistungen und -Enumeratoren als ein Beispiel.

Um diese Klasse unabhängig ICollectionOnSTLImpl verwenden:

  • typedef eine Spezialisierung dieser Klasse.

  • Verwenden Sie typedef als Vorlagenargument in einer Spezialisierung von CComObject.

  • Erstellen Sie eine Instanz der CComObject Spezialisierung.

  • Initialisieren Sie das Enumeratorobjekt, indem Sie IEnumOnSTLImpl::Init aufrufen.

  • Geben Sie die Enumeratorschnittstelle an den Client zurück.

Vererbungshierarchie

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Anforderungen

Header: möchten

Beispiel

Der Code, der unten angezeigt wird, stellt eine generische Funktion, um die Erstellung und die Initialisierung eines Enumeratorobjekts bearbeiten:

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

Diese Vorlagenfunktion kann verwendet werden, um die _NewEnum-Eigenschaft einer Auflistungsschnittstelle wie unten gezeigt zu implementieren:

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.

Dieser Code erstellt typedef für CComEnumOnSTL, der einen Vektor von CComVariant s mithilfe der IEnumVariant-Schnittstelle verfügbar macht. Die Klasse CVariantCollection spezialisiert einfach CreateSTLEnumerator, um mit Enumeratorobjekten dieses Typs zu arbeiten.

Siehe auch

Referenz

IEnumOnSTLImpl

CComObjectRootEx Class

CComObjectThreadModel

IEnumOnSTLImpl Class

Konzepte

ATLCollections-Beispiel: Veranschaulicht ICollectionOnSTLImpl, CComEnumOnSTL und benutzerdefinierte Kopierrichtlinienklassen

Weitere Ressourcen

ATL Class Overview