Klasa CAdapt
Ten szablon jest używany do opakowywania klas, które ponownie definiują operator address-of, aby zwrócić coś innego niż adres obiektu.
template <
class T
>
class CAdapt
Parametry
- T
Typ dostosowany.
Elementy członkowskie
Konstruktory publiczne
Name |
Opis |
---|---|
Konstruktor. |
Operatory publiczne
Name |
Opis |
---|---|
Zwraca odwołanie const do m_T. |
|
Zwraca odwołanie do m_T. |
|
Porównuje obiekt typu dostosowanego z m_T. |
|
Przypisuje obiekt typu dostosowanego do m_T. |
|
Porównuje obiekt typu dostosowanego z m_T. |
Publiczne elementy członkowskie danych
Name |
Opis |
---|---|
Dostosowywane dane. |
Uwagi
CAdapt to pojedynczy szablon używany do opakowywania klas, które ponownie definiują operator address-of (operator &), aby zwrócić coś innego niż adres obiektu.Przykłady takich klas obejmują klasy ATL CComBSTR, CComPtr i CComQIPtr , a także klasę obsługi kompilatora COM _com_ptr_t.Wszystkie te klasy ponownie definiują operator address-of, aby zwrócić adres jednego z ich elementów członkowskich danych (BSTR w przypadku CComBSTR i wskaźnik interfejsu w przypadku innych klas).
Podstawową rolą CAdapt jest ukrycie operatora address-of zdefiniowanego przez klasę T, a jednocześnie zachowanie charakterystyk klasy dostosowanej.CAdapt spełnia tę rolę poprzez posiadanie publicznego elementu członkowskiego m_T, typu T oraz w drodze określenia operatorów konwersji, operatorów porównania oraz konstruktora kopiującego w celu umożliwienia, aby specjalizacje CAdapt były traktowane tak, jakby były obiektami typu T.
Klasa adaptera CAdapt jest przydatna, ponieważ niektóre klasy w stylu pojemnika oczekują, aby być w stanie uzyskać adresy ich zawartych obiektów za pomocą operatora address-of.Ponowne zdefiniowanie operatora address-of może spowodować problemy z tym wymaganiem, zazwyczaj powoduje błędy kompilacji i uniemożliwia wykorzystywanie typu niezaadaptowanego z klasami, które oczekują, że „po prostu ma działać”.CAdapt zapewnia sposób obejścia tych problemów.
Zazwyczaj będziesz używać CAdapt, kiedy chcesz przechowywać obiekty CComBSTR, CComPtr, CComQIPtr lub _com_ptr_t w klasie w stylu kontenera.Było to najczęściej konieczne w przypadku kontenerów standardowej biblioteki C++, zanim dodano obsługę standardu C++11, ale kontenery standardowej biblioteki C++11 automatycznie pracują z typami, które przeciążają operator&().Standardowa biblioteka osiąga to za pomocą wewnętrznego korzystania z std::addressof(), aby uzyskać prawdziwe adresy obiektów.
Wymagania
Nagłówek: atlcomcli.h