Klasa CComEnumOnSTL
Ta klasa definiuje obiektu numeratora COM opartego na zbiorze 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 >
Parametry
Base
Modułu wyliczającego COM (IEnumXXXX) interfejsu.piid
Wskaźnik na identyfikator interfejsu interfejsu modułu wyliczającego.T
Typ elementu przez interfejs moduł wyliczający.Copy
A kopię zasad klasy.CollType
Klasa STL kontenera.
Uwagi
CComEnumOnSTLdefiniuje obiekt COM modułu wyliczającego oparte na zbiorze STL.Do tej klasy można samodzielnie lub w połączeniu z ICollectionOnSTLImpl.Typowe kroki tej klasy są przedstawione poniżej.Aby uzyskać więcej informacji, zobacz Kolekcje ATL i moduły wyliczające.
Aby użyć tej klasy z ICollectionOnSTLImpl:
typedefspecjalizacji tej klasy.
Użyj typedef jako argument końcowego szablonu w specjalizacji z ICollectionOnSTLImpl.
Zobacz Kolekcje ATL i moduły wyliczające przykład.
Aby użyć tej klasy, niezależnie od ICollectionOnSTLImpl:
typedefspecjalizacji tej klasy.
Użyj typedef jako argument szablonu specjalizacji z CComObject.
Tworzenie instancji CComObject specjalizacji.
Zainicjowanie obiektu numeratora wywołując IEnumOnSTLImpl::Init.
Zwraca interfejs modułu wyliczającego do klienta.
Hierarchii dziedziczenia
CComObjectRootBase
Base
CComEnumOnSTL
Wymagania
Nagłówek: atlcom.h
Przykład
Kod pokazany poniżej zawiera rodzajowe funkcji obsługi tworzenia i inicjalizacji obiekt 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
Ta funkcja szablonu można zaimplementować _NewEnum właściwości interfejsu zbierania, jak pokazano poniżej:
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.
Kod ten tworzy typedef do CComEnumOnSTL miejscami wektor CComVariants poprzez IEnumVariant interfejsu.CVariantCollection po prostu specjalizuje się klasy CreateSTLEnumerator do pracy z modułu wyliczającego obiektów tego typu.