CAdapt – třída
Tato šablona se používá k zabalení tříd, které mění definici operátoru address-of tak, aby vracely něco jiného než adresu objektu.
Syntaxe
template <class T>
class CAdapt
Parametry
T
Adaptovaný typ
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CAdapt::CAdapt | Konstruktor |
Veřejné operátory
Název | Popis |
---|---|
CAdapt::operator const T& | const Vrátí odkaz na m_T . |
CAdapt::operator T& | Vrátí odkaz na m_T . |
CAdapt::operator < | Porovná objekt přizpůsobeného typu s m_T . |
CAdapt::operator = | Přiřadí objekt přizpůsobeného typu m_T . |
CAdapt::operator == | Porovná objekt přizpůsobeného typu s m_T . |
Veřejné datové členy
Název | Popis |
---|---|
CAdapt::m_T | Adaptovaná data |
Poznámky
CAdapt
je jednoduchá šablona používaná k zabalení tříd, které předefinují operátor adresy (operator &
) tak, aby vrátily něco jiného než adresu objektu. Mezi příklady takových tříd patří ATL CComBSTR
, CComPtr
a třídy, CComQIPtr
a kompilátor COM třídy podpory, _com_ptr_t
. Tyto třídy všechny předefinují operátor adresy, aby vrátil adresu jednoho z jejich datových členů (BSTR v případě CComBSTR
, a ukazatel rozhraní v případě ostatních tříd).
CAdapt
Primární role spočívá v skrytí operátoru adresy definovaného třídou T, ale přesto zachovat charakteristiky upravené třídy. CAdapt
plní tuto úlohu tím, že drží veřejného člena m_T typu T a definuje operátory převodu, relační operátory CAdapt
a konstruktor kopírování, aby bylo možné se specializacemi považovat za objekty typu T.
Třída CAdapt
adaptéru je užitečná, protože některé třídy typu kontejneru očekávají, že budou moci získat adresy jejich obsažených objektů pomocí operátoru adresy. Změna definice operátoru address-of může tento požadavek zmařit a zpravidla způsobí chyby kompilace a zabrání použití neadaptovaného typu s třídami, které očekávají, že bude fungovat. CAdapt
poskytuje způsob, jak tyto problémy obejít.
Obvykle se používá CAdapt
, když chcete uložit CComBSTR
, CComPtr
, CComQIPtr
, nebo _com_ptr_t
objekty ve třídě typu kontejneru. To bylo nejčastěji nutné pro kontejnery standardní knihovny C++ před podporou C++11 Standard, ale kontejnery C++11 standardní knihovny automaticky pracují s typy, které jsou přetížené operator&()
. Standardní knihovna toho dosahuje interně pomocí std::addressof k získání skutečných adres objektů.
Požadavky
Hlavička: atlcomcli.h
CAdapt::CAdapt
Konstruktory umožňují, aby objekt adaptéru byl vytvořen jako výchozí, zkopírován z objektu přizpůsobeného typu nebo zkopírován z jiného objektu adaptéru.
CAdapt();
CAdapt(const T& rSrc);
CAdapt(const CAdapt& rSrCA);
CAdapt(T&& rSrCA); // (Visual Studio 2017)
CAdapt(CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
Parametry
rSrc
Proměnná typu, který je upraven tak, aby se zkopíroval do nově vytvořeného objektu adaptéru.
rSrCA
Objekt adaptéru, jehož obsažená data by se měla zkopírovat (nebo přesunout) do nově vytvořeného objektu adaptéru.
CAdapt::m_T
Uchovává přizpůsobená data.
T m_T;
Poznámky
K tomuto public
datovému členu lze přistupovat přímo nebo nepřímo pomocí operátoru const T& a operátor T&&.
CAdapt::operator const T&
const
Vrátí odkaz na m_T člen, který umožňuje, aby objekt adaptéru byl považován za objekt typu T.
operator const T&() const;
Návratová hodnota
Odkaz const
na m_T
.
CAdapt::operator T&
Vrátí odkaz na m_T člen, který umožňuje, aby objekt adaptéru byl považován za objekt typu T.
operator T&();
Návratová hodnota
Odkaz na m_T
.
CAdapt::operator <
Porovná objekt přizpůsobeného typu s m_T.
bool operator<(const T& rSrc) const;
Parametry
rSrc
Odkaz na objekt, který se má porovnat.
Návratová hodnota
Výsledek porovnání mezi m_T
a rSrc.
CAdapt::operator =
Operátor přiřazení přiřadí argument rSrc m_T datovému členu a vrátí aktuální objekt adaptéru.
CAdapt& operator= (const T& rSrc);
CAdapt& operator= (T&& rSrCA); // (Visual Studio 2017)
CAdapt& operator= (CAdapt<T>&& rSrCA) noexcept; // (Visual Studio 2017)
Parametry
rSrc
Odkaz na objekt přizpůsobeného typu, který se má zkopírovat.
rSrCA
Odkaz na objekt, který se má přesunout.
Návratová hodnota
Odkaz na aktuální objekt.
CAdapt::operator ==
Porovná objekt přizpůsobeného typu s m_T.
bool operator== (const T& rSrc) const;
Parametry
rSrc
Odkaz na objekt, který se má porovnat.
Návratová hodnota
Výsledek porovnání mezi m_T a rSrc.