CComEnumOnSTL Class
Questa classe definisce un oggetto enumeratore COM basato su una raccolta STL.
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
Un'interfaccia dell'enumeratore COM ().piid
Un puntatore all'ID dell'interfaccia dell'enumeratore.T
Il tipo di elemento esposto dall'enumeratore.Copy
Una classe criteri di copia.CollType
Una classe di contenitori STL.
Note
CComEnumOnSTL definisce un oggetto enumeratore COM basato su una raccolta STL. Questa classe può essere utilizzata da sola o insieme a ICollectionOnSTLImpl. I passaggi comuni per l'utilizzo di tale classe sono descritti in. Per ulteriori informazioni, vedere Raccolte e enumeratori ATL.
Per utilizzare questa classe con ICollectionOnSTLImpl:
typedef una specializzazione di questa classe.
Utilizzare typedef come argomento di modello finale in una specializzazione ICollectionOnSTLImpl.
Vedere Raccolte e enumeratori ATL per un esempio.
Per utilizzare questa classe indipendentemente da ICollectionOnSTLImpl:
typedef una specializzazione di questa classe.
Utilizzare typedef come argomento di modello in una specializzazione CComObject.
Creare un'istanza della specializzazione CComObject.
Inizializzare l'oggetto enumeratore chiamando IEnumOnSTLImpl::Init.
Restituisce l'interfaccia dell'enumeratore al client.
Gerarchia di ereditarietà
CComObjectRootBase
Base
CComEnumOnSTL
Requisiti
Header: atlcom.h
Esempio
Il codice riportato di seguito fornisce una funzione generica per gestire la creazione e l'inizializzazione di un oggetto enumerator:
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
Questa funzione modello può essere utilizzata per implementare la proprietà _NewEnum di un'interfaccia 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 typedef per CComEnumOnSTL che espone un vettore CComVariants per l'utilizzo dell'interfaccia IEnumVariant. La classe CVariantCollection specializza semplicemente CreateSTLEnumerator per l'utilizzo degli oggetti enumeratori di questo tipo.