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ığındaICollectionOnSTLImpl
son ş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ındaCComObject
ş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
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ü CComVariant
kullanı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ı