Třída CComEnumOnSTL
Tato třída definuje čítače výčtu objektu COM založena kolekci 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
Čítač výčtu COM (IEnumXXXX) rozhraní.piid
Ukazatel na ID rozhraní čítač rozhraní.T
Typ položky prezentována čítač rozhraní.Copy
A kopie zásady třídy.CollType
Třída kontejneru STL.
Poznámky
CComEnumOnSTLdefinuje objekt enumerator COM založena kolekci STL.Tato třída lze použít samostatně nebo ve spojení s ICollectionOnSTLImpl.Typické kroky pro používání této třídy jsou uvedeny níže.Další informace naleznete v tématu kolekce ATL a čítače výčtu.
Pomocí této třídy ICollectionOnSTLImpl:
typedefspecializace této třídy.
Použití typedef jako argument konečné šablony v specializace z ICollectionOnSTLImpl .
Viz kolekce ATL a čítače výčtu příklad.
Pomocí této třídy nezávisle na ICollectionOnSTLImpl:
typedefspecializace této třídy.
Použití typedef jako argument šablony v specializace z CComObject .
Vytvořit instanci CComObject specializace.
Inicializovat objekt enumerator voláním IEnumOnSTLImpl::Init.
Čítač rozhraní vrátíte klientovi.
Hierarchii dědičnosti
CComObjectRootBase
Base
CComEnumOnSTL
Požadavky
Záhlaví: atlcom.h
Příklad
Kód níže obsahuje obecné funkce pro zpracování vytvoření a inicializace objektu 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
Tato funkce šablony lze použít k implementaci _NewEnum vlastnosti rozhraní sběru, jak je ukázáno níže:
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.
Tento kód vytvoří typedef pro CComEnumOnSTL poskytuje vektor CComVariant s pomocí IEnumVariant rozhraní.CVariantCollection třídy jednoduše specializuje CreateSTLEnumerator práce s objekty tohoto typu enumerator.
Viz také
Referenční dokumentace
Koncepty
ATLCollections vzorku: ukazuje ICollectionOnSTLImpl, CComEnumOnSTL a vlastní kopii zásady třídy