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 diICollectionOnSTLImpl
.
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 diCComObject
.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
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 CComVariant
s 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