Classe di CComEnum
Questa classe definisce un oggetto enumeratore COM basato su una matrice.
template <
class Base,
const IID* piid,
class T,
class Copy,
class ThreadModel = CcomObjectThreadModel
>
class ATL_NO_VTABLE CComEnum :
public CComEnumImpl<Base, piid, T, Copy>,
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
classe criteri di copiaomogeneo.ThreadModel
Il modello di threading della classe.Impostazioni predefinite di questo parametro al modello di threading globale dell'oggetto utilizzato nel progetto.
Note
CComEnum definisce un oggetto enumeratore COM basato su una matrice.Questa classe è analogo a CComEnumOnSTL che implementa un enumeratore basato su un contenitore STL.I passaggi comuni per l'utilizzo di tale classe sono descritti in.Per ulteriori informazioni, vedere Raccolte e enumeratori ATL.
Per utilizzare questa classe:
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 CComEnumImpl::Init.
Restituisce l'interfaccia dell'enumeratore al client.
Gerarchia di ereditarietà
CComObjectRootBase
Base
CComEnum
Requisiti
Header: atlcom.h
Esempio
Il codice riportato di seguito fornisce una funzione riutilizzabile per creare e inizializzare un oggetto enumerator.
template <class EnumType, class ElementType>
HRESULT CreateEnumerator(IUnknown** ppUnk, ElementType* begin, ElementType* end,
IUnknown* pUnk, CComEnumFlags flags)
{
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(begin, end, pUnk, flags);
if (SUCCEEDED(hr))
hr = pEnum->QueryInterface(ppUnk);
if (FAILED(hr))
delete pEnum;
return hr;
} // CreateEnumerator
Questa funzione modello può essere utilizzata per implementare la proprietà _NewEnum di un'interfaccia di raccolta come illustrato di seguito:
typedef CComEnum<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT> > VarArrEnum;
class ATL_NO_VTABLE CVariantArrayCollection :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CVariantArrayCollection, &CLSID_VariantArrayCollection>,
public IDispatchImpl<IVariantArrayCollection, &IID_IVariantArrayCollection, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
VARIANT m_arr[3];
public:
STDMETHOD(get__NewEnum)(IUnknown** ppUnk)
{
return CreateEnumerator<VarArrEnum>(ppUnk, &m_arr[0], &m_arr[3], this,
AtlFlagNoCopy);
}
// Remainder of class declaration omitted.
Questo codice crea typedef per CComEnum che espone un vettore VARIANToggetti tramite l'interfaccia IEnumVariant.La classe CVariantArrayCollection specializza semplicemente CreateEnumerator per l'utilizzo degli oggetti enumeratori di questo tipo e passa gli argomenti necessari.