CComEnumOnSTL – třída
Tato třída definuje objekt enumerátoru MODELU COM na základě kolekce standardní knihovny jazyka C++.
Syntaxe
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
Základna
Enumerátor MODELU COM. Příklad najdete v souboru IEnumString .
piid
Ukazatel na ID rozhraní enumerátoru.
T
Typ položky vystavené rozhraním enumerátoru.
Kopírování
Třída zásady kopírování.
Typ kola
Třída kontejneru standardní knihovny C++.
Poznámky
CComEnumOnSTL
definuje objekt enumerátoru MODELU COM na základě kolekce standardní knihovny jazyka C++. Tuto třídu lze použít samostatně nebo ve spojení s ICollectionOnSTLImpl. Typické kroky pro použití této třídy jsou popsány níže. Další informace naleznete v tématu ATL Collections and Enumerators.
Chcete-li použít tuto třídu s ICollectionOnSTLImpl:
typedef
specializace této třídy.typedef
Použijte jako poslední argument šablony ve specializaciICollectionOnSTLImpl
.
Příklad najdete v kolekcích ATL a výčtech .
Chcete-li použít tuto třídu nezávisle na ICollectionOnSTLImpl:
typedef
specializace této třídy.typedef
Použijte jako argument šablony v specializaci .CComObject
Vytvořte instanci
CComObject
specializace.Inicializace enumerator objektu volání IEnumOnSTLImpl::Init.
Vraťte rozhraní enumerátoru klientovi.
Hierarchie dědičnosti
CComObjectRootBase
Base
CComEnumOnSTL
Požadavky
Hlavička: atlcom.h
Příklad
Níže uvedený kód poskytuje obecnou funkci pro zpracování vytváření a inicializace objektu enumerátoru:
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
Tuto šablonu funkce lze použít k implementaci _NewEnum
vlastnosti rozhraní kolekce, jak je znázorně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
, který zveřejňuje vektory CComVariant
s prostřednictvím IEnumVariant
rozhraní. Třída CVariantCollection
se jednoduše specializuje CreateSTLEnumerator
na práci s objekty enumerátoru tohoto typu.
Viz také
IEnumOnSTLImpl
Ukázka ATLCollections: Demonstruje ICollectionOnSTLImpl, CComEnumOnSTL a vlastní třídy zásad kopírování
Přehled třídy
CComObjectRootEx – třída
CComObjectThreadModel
IEnumOnSTLImpl – třída