Klasa CComEnumOnSTL
Ta klasa definiuje obiekt modułu wyliczającego COM na podstawie kolekcji biblioteki standardowej języka C++.
Składnia
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
Baza
Moduł wyliczający COM. Zobacz przykład IEnumString .
piid
Wskaźnik do identyfikatora interfejsu interfejsu modułu wyliczającego.
T
Typ elementu uwidocznionego przez interfejs modułu wyliczającego.
kopia
Klasa zasad kopiowania.
Typ sortowania
Klasa kontenera biblioteki standardowej C++.
Uwagi
CComEnumOnSTL
definiuje obiekt modułu wyliczającego COM na podstawie kolekcji standardowej biblioteki języka C++. Tej klasy można używać samodzielnie lub w połączeniu z ICollectionOnSTLImpl. Poniżej przedstawiono typowe kroki korzystania z tej klasy. Aby uzyskać więcej informacji, zobacz Kolekcje i moduły wyliczania ATL.
Aby użyć tej klasy z aplikacją ICollectionOnSTLImpl:
typedef
specjalizacja tej klasy.typedef
Użyj jako końcowego argumentu szablonu w specjalizacjiICollectionOnSTLImpl
.
Zobacz przykład Kolekcje i moduły wyliczania ATL.
Aby użyć tej klasy niezależnie od klasy ICollectionOnSTLImpl:
typedef
specjalizacja tej klasy.typedef
Użyj jako argumentu szablonu w specjalizacji .CComObject
Utwórz wystąpienie specjalizacji
CComObject
.Zainicjuj obiekt modułu wyliczającego, wywołując element IEnumOnSTLImpl::Init.
Zwróć interfejs modułu wyliczającego do klienta.
Hierarchia dziedziczenia
CComObjectRootBase
Base
CComEnumOnSTL
Wymagania
Nagłówek: atlcom.h
Przykład
Poniższy kod udostępnia funkcję ogólną do obsługi tworzenia i inicjowania obiektu modułu wyliczającego:
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
Za pomocą tego szablonu funkcji można zaimplementować _NewEnum
właściwość interfejsu kolekcji, 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.
Ten kod tworzy typedef
element , CComEnumOnSTL
który uwidacznia wektor CComVariant
s za pomocą interfejsu IEnumVariant
. Klasa CVariantCollection
po prostu specjalizuje się CreateSTLEnumerator
w pracy z obiektami wyliczania tego typu.
Zobacz też
IEnumOnSTLImpl
Przykład ATLCollections: demonstruje klasy zasad ICollectionOnSTLImpl, CComEnumOnSTL i niestandardowe klasy zasad kopiowania
Omówienie klasy
Klasa CComObjectRootEx
CComObjectThreadModel
Klasa IEnumOnSTLImpl