CComEnumOnSTL-Klasse
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
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.