Поделиться через


Класс 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.

См. также

Общие сведения о классе