Bagikan melalui


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 spesialisasi ICollectionOnSTLImpl.

Lihat Koleksi dan Enumerator ATL misalnya.

Untuk menggunakan kelas ini secara independen dari ICollectionOnSTLImpl:

  • typedef spesialisasi kelas ini.

  • typedef Gunakan sebagai argumen templat dalam spesialisasi CComObject.

  • Buat instans CComObject spesialisasi.

  • Inisialisasi objek enumerator dengan memanggil IEnumOnSTLImpl::Init.

  • Mengembalikan antarmuka enumerator ke klien.

Hierarki Warisan

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

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 CComVariants 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