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


Класс CAdapt

Замечание

Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

Этот шаблон используется для создания оболочек классов, переопределяющих оператор взятия адреса, чтобы он возвращал нечто, отличное от адреса объекта.

Синтаксис

template <class T>
class CAdapt

Параметры

T
Адаптированный тип.

Участники

Открытые конструкторы

Имя Описание
CAdapt::CAdapt Конструктор.

Открытые операторы

Имя Описание
CAdapt::operator const T& Возвращает ссылку const на m_T.
CAdapt::operator T& Возвращает ссылку на m_T.
CAdapt::operator < Сравнивает объект адаптированного типа с m_T.
CAdapt::operator = Присваивает m_T объект адаптированного типа.
CAdapt::operator == Сравнивает объект адаптированного типа с m_T.

Открытые члены данных

Имя Описание
CAdapt::m_T Адаптируемые данные.

Замечания

CAdapt представляет собой простой шаблон, который используется для создания оболочек классов, переопределяющих оператор взятия адреса (operator &), чтобы он возвращал нечто, отличное от адреса объекта. Примерами таких классов являются классы ATL CComBSTR, CComPtr и CComQIPtr, а также класс поддержки COM компилятора _com_ptr_t. Эти классы все переопределяет адрес оператора, чтобы вернуть адрес одного из своих членов данных (BSTR в случае CComBSTRи указатель интерфейса в случае других классов).

CAdaptОсновная роль заключается в скрытии адреса оператора, определенного классом T, но по-прежнему сохраняет характеристики адаптированного класса. CAdapt выполняет эту роль, удерживая открытый член, m_T типа T, а также определяя операторы преобразования, операторы сравнения и конструктор копирования, чтобы разрешить специализации CAdapt рассматриваться как объекты типа T.

Класс адаптера CAdapt полезен, поскольку для некоторых классов стиля контейнера ожидается, что они могут получать адреса содержащихся в них объектов с помощью оператора взятия адреса. Переопределение оператора взятия адреса может нарушать это требование, поскольку обычно вызывает ошибки компиляции и не позволяет использовать неадаптированный тип с классами, которые ожидают, что он "просто будет работать". CAdapt предоставляет способ обойти эти проблемы.

Обычно CAdapt используется при необходимости хранить объекты CComBSTR, CComPtr, CComQIPtr или _com_ptr_t в классе стиля контейнера. Это часто требовалось для контейнеров стандартной библиотеки C++ до введения поддержки стандарта C++11; контейнеры стандартной библиотеки C++11 автоматически работают с типами, в которых оператор operator&() перегружен. Стандартная библиотека достигает этого с помощью std::addressof для получения истинных адресов объектов.

Требования

Заголовок: atlcomcli.h

CAdapt::CAdapt

Конструкторы позволяют объекту адаптера создаваться по умолчанию, копироваться из объекта адаптированного типа или копироваться из другого объекта адаптера.

CAdapt();
CAdapt(const T& rSrc);
CAdapt(const CAdapt& rSrCA);
CAdapt(T&& rSrCA);  // (Visual Studio 2017)
CAdapt(CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)

Параметры

rSrc
Переменная типа, адаптированного для копирования в только что созданный объект адаптера.

rSrCA
Объект адаптера, содержащий данные которого следует скопировать (или переместить) в только что созданный объект адаптера.

CAdapt::m_T

Содержит данные, которые адаптируются.

T m_T;

Замечания

К этому public члену данных можно обращаться напрямую или косвенно с помощью оператора const T& и оператора T>.

CAdapt::operator const T&

Возвращает ссылку const на элемент m_T , позволяя объекту адаптера обрабатываться так, как если бы он был объектом типа T.

operator const T&() const;

Возвращаемое значение

Ссылка const на m_T.

CAdapt::operator T&

Возвращает ссылку на элемент m_T , позволяя объекту адаптера обрабатываться так, как если бы он был объектом типа T.

operator T&();

Возвращаемое значение

Ссылка на идентификатор m_T.

CAdapt::operator <

Сравнивает объект адаптированного типа с m_T.

bool operator<(const T& rSrc) const;

Параметры

rSrc
Ссылка на объект для сравнения.

Возвращаемое значение

Результат сравнения между m_T и rSrc.

CAdapt::operator =

Оператор назначения назначает аргумент rSrc m_T члену данных и возвращает текущий объект адаптера.

CAdapt& operator= (const T& rSrc);
CAdapt& operator= (T&& rSrCA); // (Visual Studio 2017)
CAdapt& operator= (CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)

Параметры

rSrc
Ссылка на объект адаптированного типа, копируемый.

rSrCA
Ссылка на перемещаемый объект.

Возвращаемое значение

Ссылка на текущий объект.

CAdapt::operator ==

Сравнивает объект адаптированного типа с m_T.

bool operator== (const T& rSrc) const;

Параметры

rSrc
Ссылка на объект для сравнения.

Возвращаемое значение

Результат сравнения между m_T и rSrc.

См. также

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