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


Класс CAdapt

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

Синтаксис

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 для получения истинных адресов объектов.

Requirements

Заголовок: 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.

См. также

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