CAdapt (clase)
Esta plantilla se utiliza para ajustar las clases que vuelven a definir el operador address-of para devolver algo distinto de la dirección del objeto.
Sintaxis
template <class T>
class CAdapt
Parámetros
T
El tipo adaptado.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CAdapt::CAdapt | Constructor . |
Operadores públicos
Nombre | Descripción |
---|---|
CAdapt::operator const T& | Devuelve una referencia const a m_T . |
CAdapt::operator T& | Devuelve una referencia a m_T . |
CAdapt::operator < | Compara un objeto de tipo adaptado con m_T . |
CAdapt::operator = | Asigna un objeto del tipo adaptado a m_T . |
CAdapt::operator == | Compara un objeto de tipo adaptado con m_T . |
Miembros de datos públicos
Nombre | Descripción |
---|---|
CAdapt::m_T | Datos que se están adaptando. |
Comentarios
CAdapt
es una plantilla sencilla que se usa para ajustar las clases que vuelven a definir el operador address-of (operator &
) para devolver algo distinto de la dirección del objeto. Algunos ejemplos de este tipo de clases son CComBSTR
, CComPtr
y CComQIPtr
de ATL y la clase compatible con COM del compilador, _com_ptr_t
. Todas estas clases vuelven a definir el operador address-of para devolver la dirección de uno de sus miembros de datos (BSTR en el caso de CComBSTR
y un puntero de interfaz en el caso de las demás clases).
La función principal de CAdapt
es ocultar el operador address-of definido por la clase T, aunque mantiene las características de la clase adaptada. CAdapt
cumple esta función almacenando un miembro público, m_T, de tipo T y definiendo operadores de conversión, operadores de comparación y un constructor de copias para permitir que las especializaciones de CAdapt
se traten como si fueran objetos de tipo T.
La clase CAdapt
del adaptador es útil porque algunas clases de estilo contenedor esperan poder obtener las direcciones de sus objetos contenidos utilizando el operador address-of. La nueva definición del operador address-of puede frustrar este requisito, lo que normalmente produce errores de compilación e impide el uso del tipo no adaptado con clases que esperan que “simplemente funcione”. CAdapt
proporciona un mecanismo para evitar estos problemas.
Normalmente, utilizará CAdapt
cuando desee almacenar objetos CComBSTR
, CComPtr
, CComQIPtr
o _com_ptr_t
en una clase de estilo contenedor. Esta solía ser necesario en los contenedores de la biblioteca de C++ estándar antes de la compatibilidad con C++11 estándar, pero los contenedores de la biblioteca C++11 estándar trabajan automáticamente con tipos que tienen un operador operator&()
sobrecargado. La biblioteca estándar logra esto utilizando internamente std::addressof para obtener las direcciones reales de los objetos.
Requisitos
Encabezado: atlcomcli.h
CAdapt::CAdapt
Los constructores permiten que un objeto de adaptador se construya de forma predeterminada, se copie de un objeto del tipo adaptado o se copie de otro objeto de adaptador.
CAdapt();
CAdapt(const T& rSrc);
CAdapt(const CAdapt& rSrCA);
CAdapt(T&& rSrCA); // (Visual Studio 2017)
CAdapt(CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
Parámetros
rSrc
Variable del tipo en proceso de adaptación que se va a copiar en el objeto de adaptador recién construido.
rSrCA
Objeto de adaptador cuyos datos contenidos se deben copiar (o mover) al objeto de adaptador recién construido.
CAdapt::m_T
Contiene los datos en proceso de adaptación.
T m_T;
Comentarios
Se puede acceder a este public
miembro de datos directamente o indirectamente con el operador const T& y el operador T&.
CAdapt::operator const T&
Devuelve una referencia const
al miembro m_T, lo que permite que el objeto de adaptador se trate como si fuera un objeto de tipo T.
operator const T&() const;
Valor devuelto
Referencia const
a m_T
.
CAdapt::operator T&
Devuelve una referencia al miembro m_T, lo que permite que el objeto de adaptador se trate como si fuera un objeto de tipo T.
operator T&();
Valor devuelto
Referencia a una estructura m_T
.
CAdapt::operator <
Compara un objeto del tipo adaptado con m_T.
bool operator<(const T& rSrc) const;
Parámetros
rSrc
Referencia al objeto que se va a comparar.
Valor devuelto
Resultado de la comparación entre m_T
y rSrc.
CAdapt::operator =
El operador de asignación asigna el argumento, rSrc, al miembro de datos m_T y devuelve el objeto de adaptador actual.
CAdapt& operator= (const T& rSrc);
CAdapt& operator= (T&& rSrCA); // (Visual Studio 2017)
CAdapt& operator= (CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
Parámetros
rSrc
Referencia a un objeto del tipo adaptado que se va a copiar.
rSrCA
Referencia a un objeto que se va a mover.
Valor devuelto
Referencia al objeto actual.
CAdapt::operator ==
Compara un objeto del tipo adaptado con m_T.
bool operator== (const T& rSrc) const;
Parámetros
rSrc
Referencia al objeto que se va a comparar.
Valor devuelto
Resultado de la comparación entre m_T y rSrc.