Freigeben über


CComEnumOnSTL-Klasse

Diese Klasse definiert ein COM-Enumerationsobjekt basierend auf einer C++-Standardbibliotheksauflistung.

Syntax

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

Bemessungsgrundlage
Ein COM-Enumerator. Ein Beispiel finden Sie unter "IEnumString ".

piid
Ein Zeiger auf die Schnittstellen-ID der Enumeratorschnittstelle.

T
Der Typ des Elements, der von der Enumerationsschnittstelle verfügbar gemacht wird.

Kopieren
Eine Kopierrichtlinienklasse .

CollType
Eine C++-Standardbibliothek-Containerklasse.

Hinweise

CComEnumOnSTL definiert ein COM-Enumerationsobjekt basierend auf einer C++-Standardbibliotheksauflistung. Diese Klasse kann eigenständig oder in Verbindung mit ICollectionOnSTLImpl verwendet werden. Typische Schritte für die Verwendung dieser Klasse sind unten beschrieben. Weitere Informationen finden Sie unter ATL-Auflistungen und Enumerationen.

So verwenden Sie diese Klasse mit ICollectionOnSTLImpl:

  • typedef eine Spezialisierung dieser Klasse.

  • Verwenden Sie das typedef letzte Vorlagenargument in einer Spezialisierung von ICollectionOnSTLImpl.

Ein Beispiel finden Sie unter ATL-Auflistungen und Enumeratoren .

So verwenden Sie diese Klasse unabhängig von ICollectionOnSTLImpl:

  • typedef eine Spezialisierung dieser Klasse.

  • Verwenden Sie das typedef Als Vorlagenargument in einer Spezialisierung von CComObject.

  • Erstellen Sie eine Instanz der CComObject Spezialisierung.

  • Initialisieren Sie das Enumerationsobjekt durch Aufrufen von IEnumOnSTLImpl::Init.

  • Gibt die Enumerationsschnittstelle an den Client zurück.

Vererbungshierarchie

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Anforderungen

Kopfzeile: atlcom.h

Beispiel

Der unten gezeigte Code stellt eine generische Funktion zum Behandeln der Erstellung und Initialisierung eines Enumeratorobjekts bereit:

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 Funktionsvorlage kann verwendet werden, um die _NewEnum Eigenschaft einer Sammlungsschnittstelle zu implementieren, wie unten dargestellt:

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 eine typedef Für CComEnumOnSTL , die einen Vektor von CComVariants über die IEnumVariant Schnittstelle verfügbar macht. Die CVariantCollection Klasse ist einfach darauf spezialisiert, mit Enumerationsobjekten dieses Typs CreateSTLEnumerator zu arbeiten.

Siehe auch

IEnumOnSTLImpl
ATLCollections-Beispiel: Veranschaulicht ICollectionOnSTLImpl, CComEnumOnSTL und benutzerdefinierte Kopierrichtlinienklassen
Klassenübersicht
CComObjectRootEx-Klasse
CComObjectThreadModel
IEnumOnSTLImpl-Klasse