Classe CAdapt
Este modelo é usado para incluir classes que redefinem o operador address-of para retornar algo diferente do endereço do objeto.
Sintaxe
template <class T>
class CAdapt
Parâmetros
T
O tipo adaptado.
Membros
Construtores públicos
Nome | Descrição |
---|---|
CAdapt::CAdapt | O construtor . |
Operadores públicos
Nome | Descrição |
---|---|
CAdapt::operator const T& | Retorna uma referência const para m_T . |
CAdapt::operator T& | Retorna uma referência para m_T . |
CAdapt::operator < | Compara um objeto do tipo adaptado com m_T . |
CAdapt::operator = | Atribui um objeto do tipo adaptado a m_T . |
CAdapt::operator == | Compara um objeto do tipo adaptado com m_T . |
Membros de Dados Públicos
Nome | Descrição |
---|---|
CAdapt::m_T | Os dados que estão sendo adaptados. |
Comentários
CAdapt
é um modelo simples usado para incluir classes que redefinem o operador address-of (operator &
) para retornar algo diferente do endereço do objeto. Exemplos dessas classes incluem as classes CComBSTR
, CComPtr
e CComQIPtr
do ATL, e a classe de suporte ao COM do compilador, _com_ptr_t
. Todas essas classes redefinem o operador address-of para retornar o endereço de um de seus membros de dados (um BSTR no caso de CComBSTR
, e um ponteiro de interface no caso de outras classes).
A função primária de CAdapt
é ocultar o operador address-of definido pela classe T, mas ainda manter as características da classe adaptada. CAdapt
cumpre essa função armazenando um membro público, m_T, do tipo T, e definindo operadores de conversão, operadores de comparação e um construtor de cópia para permitir que especializações de CAdapt
sejam tratadas como se fossem objetos do tipo T.
A classe de adaptador CAdapt
é útil porque algumas classes do estilo contêiner esperam poder obter os endereços de seus objetos contidos usando o operador address-of. A redefinição do operador address-of pode confundir esse requisito, normalmente causando erros de compilação e evitando o uso do tipo não adaptado com classes que o esperam como “apenas trabalho”. CAdapt
fornece uma maneira de contornar esses problemas.
Normalmente, você usará CAdapt
quando quiser armazenar objetos CComBSTR
, CComPtr
, CComQIPtr
ou _com_ptr_t
em um o estilo de contêiner. Isso era o geralmente necessário para contêineres da biblioteca padrão C++ antes do suporte para o padrão C++11, mas os contêineres da biblioteca padrão C++11 funcionam automaticamente com tipos que sobrecarregaram operator&()
. A Biblioteca Padrão obtém isso internamente usando std::addressof para obter os endereços verdadeiros dos objetos.
Requisitos
Cabeçalho: atlcomcli.h
CAdapt::CAdapt
Os construtores permitem que um objeto adaptador seja construído por padrão, copiado de um objeto do tipo adaptado ou copiado de outro objeto do 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
Uma variável do tipo que está sendo adaptada para ser copiada no objeto do adaptador recém-construído.
rSrCA
Um objeto adaptador cujos dados contidos devem ser copiados (ou movidos) para o objeto do adaptador recém-construído.
CAdapt::m_T
Mantém os dados que estão sendo adaptados.
T m_T;
Comentários
Este public
membro de dados pode ser acessado direta ou indiretamente com o operador const T& e o operador T&.
CAdapt::operator const T&
Retorna uma referência const
ao membro m_T, permitindo que o objeto do adaptador seja tratado como se fosse um objeto do tipo T.
operator const T&() const;
Valor de retorno
Uma referência const
a m_T
.
CAdapt::operator T&
Retorna uma referência ao membro m_T, permitindo que o objeto do adaptador seja tratado como se fosse um objeto do tipo T.
operator T&();
Valor de retorno
Uma referência a m_T
.
CAdapt::operator <
Compara um objeto do tipo adaptado com m_T.
bool operator<(const T& rSrc) const;
Parâmetros
rSrc
Uma referência ao objeto a ser comparado.
Valor de retorno
O resultado da comparação entre m_T
e rSrc.
CAdapt::operator =
O operador de atribuição atribui o argumento rSrc ao membro de dados m_T e retorna o objeto do adaptador atual.
CAdapt& operator= (const T& rSrc);
CAdapt& operator= (T&& rSrCA); // (Visual Studio 2017)
CAdapt& operator= (CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
Parâmetros
rSrc
Uma referência a um objeto do tipo adaptado a ser copiado.
rSrCA
Uma referência a um objeto a ser movido.
Valor de retorno
Uma referência ao objeto atual.
CAdapt::operator ==
Compara um objeto do tipo adaptado com m_T.
bool operator== (const T& rSrc) const;
Parâmetros
rSrc
Uma referência ao objeto a ser comparado.
Valor de retorno
O resultado da comparação entre m_T e rSrc.