Класс CComEnumOnSTL
Этот класс определяет объект перечислителя COM на основе коллекции стандартной библиотеки C++.
Синтаксис
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>
Параметры
Основание
Перечислитель COM. См . пример IEnumString .
piid
Указатель на идентификатор интерфейса интерфейса перечислителя.
T
Тип элемента, предоставляемый интерфейсом перечислителя.
Копировать
Класс политики копирования.
CollType
Класс контейнера стандартной библиотеки C++.
Замечания
CComEnumOnSTL
определяет объект перечислителя COM на основе коллекции стандартной библиотеки C++. Этот класс можно использовать самостоятельно или в сочетании с ICollectionOnSTLImpl. Ниже описаны типичные шаги по использованию этого класса. Дополнительные сведения см. в разделе "Коллекции и перечислители ATL".
Чтобы использовать этот класс с ICollectionOnSTLImpl, выполните указанные ниже действия.
typedef
специализация этого класса.typedef
Используйте в качестве окончательного аргумента шаблона в специализацииICollectionOnSTLImpl
.
Пример см. в коллекциях и перечислителях ATL.
Чтобы использовать этот класс независимо от ICollectionOnSTLImpl:
typedef
специализация этого класса.typedef
Используйте в качестве аргумента шаблона в специализацииCComObject
.Создайте экземпляр специализации
CComObject
.Инициализировать объект перечислителя путем вызова IEnumOnSTLImpl::Init.
Верните интерфейс перечислителя клиенту.
Иерархия наследования
CComObjectRootBase
Base
CComEnumOnSTL
Требования
Заголовок: atlcom.h
Пример
Приведенный ниже код предоставляет универсальную функцию для обработки создания и инициализации объекта перечислителя:
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
Этот шаблон функции можно использовать для реализации _NewEnum
свойства интерфейса коллекции, как показано ниже:
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.
Этот код создает typedef
для CComEnumOnSTL
этого вектор s CComVariant
с помощью IEnumVariant
интерфейса. Класс CVariantCollection
просто специализируется CreateSTLEnumerator
на работе с объектами перечислителя этого типа.
См. также
IEnumOnSTLImpl
Пример ATLCollections: демонстрирует классы политик ICollectionOnSTLImpl, CComEnumOnSTL и настраиваемые классы политик копирования
Общие сведения о классе
Класс CComObjectRootEx
CComObjectThreadModel
Класс IEnumOnSTLImpl