Класс IEnumOnSTLImpl
Этот класс определяет интерфейс перечислителя на основе коллекции стандартной библиотеки C++.
Синтаксис
template <class Base,
const IID* piid, class T, class Copy, class CollType>
class ATL_NO_VTABLE IEnumOnSTLImpl : public Base
Параметры
Основание
Перечислитель COM. См . пример IEnumString .
piid
Указатель на идентификатор интерфейса интерфейса перечислителя.
T
Тип элемента, предоставляемый интерфейсом перечислителя.
Копировать
Класс политики копирования.
CollType
Класс контейнера стандартной библиотеки C++.
Участники
Открытые методы
Имя | Описание |
---|---|
IEnumOnSTLImpl::Clone | Реализация Клонирования. |
IEnumOnSTLImpl::Init | Инициализирует перечислитель. |
IEnumOnSTLImpl::Next | Реализация Next. |
IEnumOnSTLImpl::Reset | Реализация сброса. |
IEnumOnSTLImpl::Skip | Реализация Skip. |
Открытые члены данных
Имя | Описание |
---|---|
IEnumOnSTLImpl::m_iter | Итератор, представляющий текущую позицию перечислителя в коллекции. |
IEnumOnSTLImpl::m_pcollection | Указатель на контейнер стандартной библиотеки C++ с перечислением элементов. |
IEnumOnSTLImpl::m_spUnk | Указатель IUnknown объекта, предоставляющего коллекцию. |
Замечания
IEnumOnSTLImpl
предоставляет реализацию для интерфейса перечислителя COM, в котором перечисляемые элементы хранятся в контейнере, совместимом со стандартной библиотекой C++. Этот класс аналогичен классу CComEnumImpl , который предоставляет реализацию интерфейса перечислителя на основе массива.
Примечание.
Дополнительные сведения о дальнейших различиях между CComEnumImpl
ими IEnumOnSTLImpl
см. в разделе CComEnumImpl::Init.
Как правило, вам не нужно создавать собственный класс перечислителя, исходя из этой реализации интерфейса. Если вы хотите использовать перечислитель ATL на основе контейнера стандартной библиотеки C++, то для создания экземпляра CComEnumOnSTL или создания класса коллекции, возвращающего перечислитель, производный от ICollectionOnSTLImpl.
Однако если необходимо предоставить пользовательский перечислитель (например, тот, который предоставляет интерфейсы в дополнение к интерфейсу перечислителя), можно наследовать от этого класса. В этой ситуации, скорее всего, потребуется переопределить метод Clone , чтобы обеспечить собственную реализацию.
Иерархия наследования
Base
IEnumOnSTLImpl
Требования
Заголовок: atlcom.h
IEnumOnSTLImpl::Init
Инициализирует перечислитель.
HRESULT Init(
IUnknown* pUnkForRelease,
CollType& collection);
Параметры
pUnkForRelease
[in] Указатель IUnknown
объекта, который должен храниться в живых во время существования перечислителя. Передайте значение NULL, если такой объект не существует.
collection
Ссылка на контейнер стандартной библиотеки C++, содержащий элементы для перечисления.
Возвращаемое значение
Стандартное значение HRESULT.
Замечания
Если передать Init
ссылку на коллекцию, удерживаемую в другом объекте, можно использовать параметр pUnkForRelease , чтобы убедиться, что объект и коллекция, которая она содержит, доступна до тех пор, пока перечислитель нуждается в нем.
Перед передачей указателя на интерфейс перечислителя клиенту необходимо вызвать этот метод.
IEnumOnSTLImpl::Clone
Этот метод обеспечивает реализацию метода Clone путем создания объекта типа CComEnumOnSTL
, инициализации его с той же коллекцией и итератором, используемым текущим объектом, и возвращая интерфейс в только что созданном объекте.
STDMETHOD(Clone)(Base** ppEnum);
Параметры
ppEnum
[out] Интерфейс перечислителя для только что созданного объекта, клонированного из текущего перечислителя.
Возвращаемое значение
Стандартное значение HRESULT.
IEnumOnSTLImpl::m_spUnk
Указатель IUnknown
объекта, предоставляющего коллекцию.
CComPtr<IUnknown> m_spUnk;
Замечания
Этот смарт-указатель сохраняет ссылку на объект, переданный в IEnumOnSTLImpl::Init, гарантируя, что он остается живым в течение времени существования перечислителя.
IEnumOnSTLImpl::m_pcollection
Этот элемент указывает на коллекцию, которая предоставляет данные, управляющие реализацией интерфейса перечислителя.
CollType* m_pcollection;
Замечания
Этот член инициализирован вызовом IEnumOnSTLImpl::Init.
IEnumOnSTLImpl::m_iter
Этот элемент содержит итератор, используемый для пометки текущей позиции в коллекции и перехода к последующим элементам.
CollType::iterator m_iter;
IEnumOnSTLImpl::Next
Этот метод предоставляет реализацию метода Next .
STDMETHOD(Next)(
ULONG celt,
T* rgelt,
ULONG* pceltFetched);
Параметры
кельт
[in] Количество запрошенных элементов.
rgelt
[out] Массив, заполненный элементами.
pceltFetched
[out] Количество элементов, возвращаемых в rgelt. Это может быть меньше celt , если меньше элементов celt остаются в списке.
Возвращаемое значение
Стандартное значение HRESULT.
IEnumOnSTLImpl::Reset
Этот метод предоставляет реализацию метода Reset .
STDMETHOD(Reset)(void);
Возвращаемое значение
Стандартное значение HRESULT.
IEnumOnSTLImpl::Skip
Этот метод предоставляет реализацию метода Skip .
STDMETHOD(Skip)(ULONG celt);
Параметры
кельт
[in] Количество пропущенных элементов.
Возвращаемое значение
Стандартное значение HRESULT.