CComEnumOnSTL sınıfı
Bu sınıfı, com, stl toplama göre bir enumerator nesnesi tanımlar.
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 >
Parametreler
Base
com numaralayıcı (IEnumXXXX) arabirimi.piid
Numaralayıcı arabirimin arabirim kimliği için bir işaretçi.T
Numaralayıcı arabirimi tarafından sergilenen öğe türü.Copy
A kopya ilke sınıfı.CollType
stl container sınıfı.
Notlar
CComEnumOnSTLstl toplama göre com enumerator nesnesi tanımlar.Bu sınıfın kendi başına veya birlikte kullanılabilen ICollectionOnSTLImpl.Bu sınıf kullanmak için normal adımlar aşağıda özetlenmiştir.Daha fazla bilgi için bkz: atl koleksiyonları ve numaralandırıcıları.
Bu sınıf ICollectionOnSTLImpl ile kullanmak için:
typedefBu sınıfın uzmanlığı.
Use typedef 'ın uzmanlığı son şablon bağımsız değişken olarak ICollectionOnSTLImpl.
Bkz: atl koleksiyonları ve numaralandırıcıları ilgili bir örnek.
Bu sınıf ICollectionOnSTLImpl bağımsız olarak kullanmak için:
typedefBu sınıfın uzmanlığı.
Use typedef uzmanlığı şablon bağımsız değişken olarak CComObject.
Örneğini CComObject uzmanlığı.
Çağırarak enumerator nesnesi başlatılamıyor IEnumOnSTLImpl::Init.
Numaralayıcı arabirimini istemciye döndürür.
Devralma hiyerarşisi
CComObjectRootBase
Base
CComEnumOnSTL
Gereksinimler
Başlık: atlcom.h
Örnek
Aşağıda gösterilen kod oluşturma ve bir enumerator nesnesi başlatma işlemek için soysal bir işlev sağlar:
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
Bu şablon işlevi uygulamak için kullanılan _NewEnum aşağıda gösterildiği gibi bir koleksiyon arabirimi özelliği:
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.
Bu kod oluşturur bir typedef için CComEnumOnSTL bir vektör sergiler CComVariant, s IEnumVariant arabirimi.CVariantCollection class basitçe uzmanlaşmış CreateSTLEnumerator bu tür numaralayıcı nesneleriyle çalışmak için.
Ayrıca bkz.
Başvuru
Kavramlar
ATLCollections örnek: ICollectionOnSTLImpl, CComEnumOnSTL ve özel kopya ilke sınıflarını gösteren