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 vonICollectionOnSTLImpl
.
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 vonCComObject
.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
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 CComVariant
s ü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