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