Kelas CComEnumOnSTL
Kelas ini mendefinisikan objek enumerator COM berdasarkan koleksi Pustaka Standar C++.
Sintaks
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>
Parameter
Dasar
Enumerator COM. Lihat IEnumString untuk contoh.
piid
Penunjuk ke ID antarmuka antarmuka enumerator.
T
Jenis item yang diekspos oleh antarmuka enumerator.
Menyalin
Kelas kebijakan penyalinan .
CollType
Kelas kontainer Pustaka Standar C++.
Keterangan
CComEnumOnSTL
menentukan objek enumerator COM berdasarkan koleksi Pustaka Standar C++. Kelas ini dapat digunakan sendiri atau bersama dengan ICollectionOnSTLImpl. Langkah-langkah umum untuk menggunakan kelas ini diuraikan di bawah ini. Untuk informasi selengkapnya, lihat Koleksi dan Enumerator ATL.
Untuk menggunakan kelas ini dengan ICollectionOnSTLImpl:
typedef
spesialisasi kelas ini.typedef
Gunakan sebagai argumen templat akhir dalam spesialisasiICollectionOnSTLImpl
.
Lihat Koleksi dan Enumerator ATL misalnya.
Untuk menggunakan kelas ini secara independen dari ICollectionOnSTLImpl:
typedef
spesialisasi kelas ini.typedef
Gunakan sebagai argumen templat dalam spesialisasiCComObject
.Buat instans
CComObject
spesialisasi.Inisialisasi objek enumerator dengan memanggil IEnumOnSTLImpl::Init.
Mengembalikan antarmuka enumerator ke klien.
Hierarki Warisan
CComObjectRootBase
Base
CComEnumOnSTL
Persyaratan
Header: atlcom.h
Contoh
Kode yang ditunjukkan di bawah ini menyediakan fungsi generik untuk menangani pembuatan dan inisialisasi objek 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
Templat fungsi ini dapat digunakan untuk mengimplementasikan _NewEnum
properti antarmuka koleksi seperti yang ditunjukkan di bawah ini:
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.
Kode ini membuat typedef
untuk CComEnumOnSTL
yang mengekspos vektor CComVariant
s dengan cara IEnumVariant
antarmuka. Kelas CVariantCollection
ini hanya berskesialisasi CreateSTLEnumerator
untuk bekerja dengan objek enumerator jenis ini.
Lihat juga
IEnumOnSTLImpl
Sampel ATLCollections: Menunjukkan Kelas Kebijakan ICollectionOnSTLImpl, CComEnumOnSTL, dan Custom Copy Policy
Gambaran Umum Kelas
Kelas CComObjectRootEx
CComObjectThreadModel
Kelas IEnumOnSTLImpl