CAdapt, classe
Ce modèle permet d'inclure dans un wrapper les classes qui redéfinissent l'opérateur d'adresse afin de retourner un autre élément que l'adresse de l'objet.
template <class T>
class CAdapt
T
Type adapté.
Nom | Description |
---|---|
CAdapt ::CAdapt | Constructeur . |
Nom | Description |
---|---|
CAdapt ::operator const T& | Retourne une const référence à m_T . |
CAdapt ::operator T& | Retourne une référence à m_T . |
CAdapt ::operator < | Compare un objet du type adapté à m_T . |
CAdapt ::operator = | Assigne un objet du type adapté à m_T . |
CAdapt ::operator == | Compare un objet du type adapté à m_T . |
Nom | Description |
---|---|
CAdapt ::m_T | Données adaptées. |
CAdapt
est un modèle simple qui permet d'inclure dans un wrapper les classes qui redéfinissent l'opérateur d'adresse (operator &
) afin de retourner un autre élément que l'adresse de l'objet. Parmi ces exemples de classes figurent les classes ATL CComBSTR
, CComPtr
et CComQIPtr
, ainsi que la classe de prise en charge COM du compilateur, _com_ptr_t
. Ces classes redéfinissent tous l’opérateur d’adresse pour retourner l’adresse de l’un de leurs membres de données (un BSTR dans le cas de CComBSTR
, et un pointeur d’interface dans le cas des autres classes).
CAdapt
le rôle principal consiste à masquer l’opérateur d’adresse défini par la classe T, mais à conserver les caractéristiques de la classe adaptée. CAdapt
remplit ce rôle en tenant un membre public, m_T, de type T, et en définissant des opérateurs de conversion, des opérateurs de comparaison et un constructeur de copie pour permettre aux spécialisations d’être CAdapt
traitées comme s’ils sont des objets de type T.
La classe d'adaptateur CAdapt
est utile, car certaines classes de type conteneur sont censées être capables d'obtenir les adresses des objets contenus via l'opérateur d'adresse. La redéfinition de l’opérateur d’adresse peut confondre cette exigence, généralement en provoquant des erreurs de compilation et en empêchant l’utilisation du type non adapté avec les classes qui s’attendent à ce qu’il fonctionne « tout simplement ». CAdapt
permet de contourner ces problèmes.
En règle générale, utilisez CAdapt
lorsque vous souhaitez stocker des objets CComBSTR
, CComPtr
, CComQIPtr
ou _com_ptr_t
dans une classe de type conteneur. Ceci était le plus souvent nécessaire pour les conteneurs de bibliothèque standard C++ avant la prise en charge de la norme C++11. Toutefois, les conteneurs de bibliothèque standard C++11 fonctionnent automatiquement avec les types ayant un operator&()
surchargé. La bibliothèque standard effectue cette opération en interne à l’aide de std ::addressof pour obtenir les véritables adresses des objets.
En-tête : atlcomcli.h
Les constructeurs permettent à un objet adaptateur d’être construit par défaut, copié à partir d’un objet du type adapté ou copié à partir d’un autre objet adaptateur.
CAdapt();
CAdapt(const T& rSrc);
CAdapt(const CAdapt& rSrCA);
CAdapt(T&& rSrCA); // (Visual Studio 2017)
CAdapt(CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
rSrc
Variable du type adapté à copier dans l’objet adaptateur nouvellement construit.
rSrCA
Objet adaptateur dont les données contenues doivent être copiées (ou déplacées) dans l’objet adaptateur nouvellement construit.
Contient les données en cours d’adaptation.
T m_T;
Ce public
membre de données est accessible directement ou indirectement avec l’opérateur const T& et l’opérateur T&.
Retourne une const
référence au membre m_T, ce qui permet à l’objet adaptateur d’être traité comme s’il s’agissait d’un objet de type T.
operator const T&() const;
Référence const
à m_T
.
Retourne une référence au membre m_T, ce qui permet à l’objet adaptateur d’être traité comme s’il s’agissait d’un objet de type T.
operator T&();
Référence à m_T
.
Compare un objet du type adapté à m_T.
bool operator<(const T& rSrc) const;
rSrc
Référence à l’objet à comparer.
Résultat de la comparaison entre m_T
et rSrc.
L’opérateur d’affectation affecte l’argument, rSrc, au membre de données m_T et retourne l’objet d’adaptateur actuel.
CAdapt& operator= (const T& rSrc);
CAdapt& operator= (T&& rSrCA); // (Visual Studio 2017)
CAdapt& operator= (CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
rSrc
Référence à un objet du type adapté à copier.
rSrCA
Référence à un objet à déplacer.
Référence à l’objet actuel.
Compare un objet du type adapté à m_T.
bool operator== (const T& rSrc) const;
rSrc
Référence à l’objet à comparer.
Résultat de la comparaison entre m_T et rSrc.