Aracılığıyla paylaş


CComEnumOnSTL Sınıfı

Bu sınıf, C++ Standart Kitaplığı koleksiyonunu temel alan bir COM numaralandırıcı nesnesi tanımlar.

Sözdizimi

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

Taban
COM numaralandırıcısı. Bir örnek için bkz . IEnumString .

piid
Numaralandırıcı arabiriminin arabirim kimliğinin işaretçisi.

T
Numaralandırıcı arabirimi tarafından kullanıma sunulan öğe türü.

Kopyala
Kopyalama ilkesi sınıfı.

CollType
C++ Standart Kitaplığı kapsayıcı sınıfı.

Açıklamalar

CComEnumOnSTL , C++ Standart Kitaplığı koleksiyonunu temel alan bir COM numaralandırıcı nesnesi tanımlar. Bu sınıf kendi başına veya ICollectionOnSTLImpl ile birlikte kullanılabilir. Bu sınıfı kullanmaya yönelik tipik 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:

  • typedef bu sınıfın bir uzmanlığı.

  • öğesinin typedef uzmanlığında ICollectionOnSTLImplson şablon bağımsız değişkeni olarak kullanın.

Bir örnek için bkz . ATL Koleksiyonları ve Numaralandırıcıları .

Bu sınıfı ICollectionOnSTLImpl'inden bağımsız olarak kullanmak için:

  • typedef bu sınıfın bir uzmanlığı.

  • typedef uzmanlık alanında CComObjectşablon bağımsız değişkeni olarak kullanın.

  • Özelleştirmenin bir örneğini CComObject oluşturun.

  • IEnumOnSTLImpl::Init çağrısı yaparak numaralandırıcı nesnesini başlatın.

  • Numaralandırıcı arabirimini istemciye döndür.

Devralma Hiyerarşisi

CComObjectRootBase

Base

CComObjectRootEx

IEnumOnSTLImpl

CComEnumOnSTL

Gereksinimler

Üst bilgi: atlcom.h

Örnek

Aşağıda gösterilen kod, bir numaralandırıcı nesnesinin oluşturulmasını ve başlatılmasını işlemek için genel 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 işlev şablonu, aşağıda gösterildiği gibi bir koleksiyon arabiriminin özelliğini uygulamak _NewEnum için kullanılabilir:

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, arabirimi aracılığıyla IEnumVariant bir s vektörünü CComVariantkullanıma sunan için bir oluşturur typedef CComEnumOnSTL. sınıfı CVariantCollection yalnızca bu türdeki numaralandırıcı nesneleriyle çalışmak için uzmanlaşmıştır CreateSTLEnumerator .

Ayrıca bkz.

IEnumOnSTLImpl
ATLCollections Örneği: ICollectionOnSTLImpl, CComEnumOnSTL ve Özel Kopyalama İlkesi Sınıflarını Gösterir
Sınıfa Genel Bakış
CComObjectRootEx Sınıfı
CComObjectThreadModel
IEnumOnSTLImpl Sınıfı