Sdílet prostřednictvím


winrt::com_ptr šablona struktury (C++/WinRT)

Šablona inteligentního ukazatele modelu COM započítaná podle odkazů. com_ptr představuje ukazatel na rozhraní nebo typ implementace třídy runtime určený parametrem template. Automaticky spravuje počet odkazů pro svůj cíl prostřednictvím soukromého nezpracovaného ukazatele.

Syntaxe

template <typename T>
struct com_ptr

Parametry šablony

typename T Rozhraní nebo typ implementace třídy za běhu, ukazatel, na který je reprezentován com_ptr. Jedná se o typ cíle inteligentního ukazatele.

Požadavky

Minimální podporovaná sada SDK: Windows SDK verze 10.0.17134.0 (Windows 10, verze 1803)

Obor názvů: winrt

Záhlaví: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\winrt\base.h (zahrnuto ve výchozím nastavení)

Aliasy typů členů

Název aliasu Typ
com_ptr::typ Synonymum pro implementací definovanou reprezentaci parametru šablony typename T .

Konstruktory

Konstruktor Popis
com_ptr::com_ptr – konstruktor Inicializuje novou instanci struktury com_ptr , volitelně s kopií nebo přesunutím vstupních dat.

Členské funkce

Funkce Popis
com_ptr::funkce as Vrátí požadované rozhraní, pokud je podporováno. Hází, pokud tomu tak není.
com_ptr::funkce attach Připojí se k nezpracovanému ukazateli, který vlastní odkaz na svůj cíl; Další odkaz není přidán.
com_ptr::funkce zachycení Zavolá určenou funkci nebo metodu (automaticky na ní zavolá winrt::check_hresult) a zachytí ukazatel rozhraní, který je výstupem z funkce nebo metody jako .void**
Funkce com_ptr::copy_from Kopie z jiného ukazatele. Sníží počet odkazů na jakékoli aktuálně odkazované rozhraní nebo objekt, zkopíruje nezpracovaný parametr ukazatele a začne spravovat životnost rozhraní nebo objektu, na který odkazuje.
Funkce com_ptr::copy_to Zkopíruje se z objektu com_ptr do jiného ukazatele. Zvýší počet odkazů na jakékoli aktuálně odkazované rozhraní nebo objekt a zkopíruje adresu paměti tohoto rozhraní nebo objektu do parametru.
Funkce com_ptr::d etach Odpojí se od odkazovaného rozhraní nebo objektu bez snížení počtu odkazů, například pro jeho vrácení volajícímu.
com_ptr::get – funkce Vrátí základní nezpracovaný ukazatel, pokud jej potřebujete předat funkci.
Funkce com_ptr::p ut Vrátí adresu podkladového nezpracovaného ukazatele. Tato funkce umožňuje volat metody (například metody modelu COM), které vracejí odkazy jako výstupní parametry prostřednictvím ukazatele na ukazatel.
Funkce com_ptr::p ut_void Vrátí adresu podkladového nezpracovaného ukazatele jako ukazatel na ukazatel na void. Tato funkce umožňuje volat metody (například metody modelu COM), které vracejí odkazy jako výstupní parametry prostřednictvím ukazatele na ukazatel na void.
Funkce com_ptr::try_as Vrátí požadované rozhraní, pokud je podporováno. Vrátí , nullptrnebo false, pokud tomu tak není.
Funkce com_ptr::try_capture Verze com_ptr::capture , která nevyvolá chybu, ale místo toho vrátí, pokud true je úspěšná nebo false ne.

Členské operátory

Operátor Popis
com_ptr::operator bool Zkontroluje, zda inteligentní ukazatel odkazuje na rozhraní nebo objekt.
com_ptr::operator* (operátor dereference) Vrátí odkaz na cíl com_ptr, abyste jej mohli předat funkci, která očekává odkaz na cílový typ T.
com_ptr::operator= (operátor přiřazení) Přiřadí hodnotu objektu com_ptr .
com_ptr::operator-> (operátor šipky) Aby bylo možné poskytnout přístup k odkazovanému rozhraní nebo metodám objektu, vrátí základní nezpracovaný ukazatel.

Volné funkce

Funkce Popis
attach_abi funkce Připojí com_ptr objekt k nezpracovanému ukazateli, který vlastní odkaz na svůj cíl; Další odkaz není přidán.
Funkce detach_abi Odpojí com_ptr objekt od jeho nezpracovaného rozhraní bez snížení počtu odkazů, například pro jeho vrácení volajícímu.
funkce výměny Prohodí obsah dvou com_ptr parametrů tak, aby ukazovaly na cíl druhého typu.

Volné operátory

Funkce Popis
operator!= (operátor nerovnosti) Vrátí hodnotu označující, zda tyto dva parametry odkazují na různé cíle.
operátor< (operátor menší než) Vrátí hodnotu označující, zda se cíl prvního parametru vyskytuje v paměti dříve než cíl druhého parametru.
operator<= (operátor menší než nebo rovno) Vrátí hodnotu označující, zda se cíl prvního parametru vyskytuje dříve v paměti než cíl druhého parametru, nebo na stejném místě jako druhý parametr.
operator== (operátor rovnosti) Vrací hodnotu označující, zda tyto dva parametry odkazují na stejné rozhraní nebo objekt.
operátor> (operátor větší než) Vrátí hodnotu označující, zda se cíl prvního parametru vyskytne v paměti později než cíl druhého parametru.
operator>= (operátor větší nebo rovno) Vrátí hodnotu označující, zda se cíl prvního parametru vyskytne později v paměti než cíl druhého parametru, nebo na stejném místě jako druhý parametr.

com_ptr::com_ptr – konstruktor

Inicializuje novou instanci struktury com_ptr , volitelně s kopií nebo přesunutím vstupních dat.

Konstruktor void* vezme T* a převezme vlastnictví. winrt::take_ownership_from_abi_t je typ značky, který explicitně převádí odpovědnost za uvolnění tohoto ukazatele na com_ptr. Počet refcount nemusí být přesně 1; Je to jen konstatování, že se přenáší odpovědnost.

Syntaxe

com_ptr(winrt::com_ptr const& other) noexcept;
com_ptr(std::nullptr_t = nullptr) noexcept;
com_ptr(void* ptr, winrt::take_ownership_from_abi_t) noexcept;
template <typename U> com_ptr(winrt::com_ptr<U> const& other) noexcept;
template <typename U> com_ptr(winrt::com_ptr<U>&& other) noexcept;

Parametry šablony

typename U Typ cíle, na který ukazuje inteligentní ukazatel vstupu.

Parametry

other Další com_ptr , který inicializuje objekt com_ptr . Parametr T musí být převoditelný na objekt Tcom_ptr .

com_ptr::funkce as

Vrátí požadované rozhraní, pokud je podporováno. Hází, pokud tomu tak není. Tato funkce je užitečná, pokud se chcete dotazovat na rozhraní, které nemusíte předávat zpět volajícímu.

Příklady kódu naleznete v části Vytváření instancí a vracení projektovaných typů a rozhraní a v dalších částech tohoto tématu.

Syntaxe

template <typename To> auto as() const;
template <typename To> void as(To& to) const;

Parametry šablony

typename To Typ požadovaného rozhraní.

Parametry

to Odkaz na hodnotu pro příjem požadovaného rozhraní.

Návratová hodnota

com_ptr odkazující na požadované rozhraní nebo inteligentní ukazatel silného typu pro požadované rozhraní (deklarovaný jazykem C++/WinRT nebo třetí stranou).

com_ptr::funkce attach

Připojí se k nezpracovanému ukazateli, který vlastní odkaz na svůj cíl; Další odkaz není přidán. V případě potřeby můžete tuto funkci použít ke sloučení odkazů.

Syntaxe

void attach(T* value) noexcept;

Parametry

value Nezpracovaný ukazatel, který vlastní odkaz na svůj cíl.

com_ptr::funkce zachycení

Zavolá určenou funkci nebo metodu (automaticky na ní zavolá winrt::check_hresult) a zachytí ukazatel rozhraní, který je výstupem z funkce nebo metody jako .void**

Viz také šablona funkce winrt::capture.

Syntaxe

template <typename F, typename...Args>
void capture(F function, Args&&...args);

template <typename O, typename M, typename...Args>
void capture(O* p, M method, Args&& ...args);

template <typename O, typename M, typename...Args>
void capture(winrt::com_ptr<O> const& object, M method, Args&&...args);

Parametry šablony

typename F Typ objektu funkce, například volná funkce nebo std::function.

typename O Typ rozhraní.

typename M Typ metody.

typename Args Nula nebo více typů argumentů.

Parametry

function Objekt funkce typu F.

p Ukazatel na objekt typu O.

object winrt::com_ptr typu O.

method Metoda (implementovaná ) Otypu M.

args Nula nebo více argumentů typu Args.

Poznámky

  • Přetížení capture(F function, Args&&...args) vyvolá objekt funkce.
  • Přetížení capture(O* p, M method, Args&& ...args) vyvolá metodu na ukazateli.
  • Přetížení capture(winrt::com_ptr<O> const& object, M method, Args&&...args) vyvolá metodu na objektu.

Všechna přetížení projdou (do invokee) všemi dalšími argumenty, které zadáte. Všechna přetížení také předají dva další argumenty, které taková volání vyžadují – konkrétně REFIID (ID cíle winrt::com_ptr) a void** (adresa ukazatele na cíl winrt::com_ptr).

Příklad

winrt::com_ptr<IDXGIAdapter> adapter
...
winrt::com_ptr<IDXGIFactory2> factory;
factory.capture(adapter, &IDXGIAdapter::GetParent);

Funkce com_ptr::copy_from

Kopie z jiného ukazatele. Sníží počet odkazů na jakékoli aktuálně odkazované rozhraní nebo objekt, zkopíruje nezpracovaný parametr ukazatele a začne spravovat životnost rozhraní nebo objektu, na který odkazuje.

Syntaxe

void copy_from(T* other) noexcept;

Parametry

other Nezpracovaný ukazatel na cíl, jehož životnost by měla být spravována objektem com_ptr .

Funkce com_ptr::copy_to

Zkopíruje se z objektu com_ptr do jiného ukazatele. Zvýší počet odkazů na jakékoli aktuálně odkazované rozhraní nebo objekt a zkopíruje adresu paměti tohoto rozhraní nebo objektu do parametru. Tato funkce umožňuje předat odkaz na stejné rozhraní bez volání QueryInterface.

Syntaxe

void copy_to(T** other) const noexcept;

Parametry

other Nezpracovaná adresa ukazatele; , do které chcete zkopírovat ukazatel na cíl com_ptr objektu.

Funkce com_ptr::d etach

Odpojí se od odkazovaného rozhraní nebo objektu bez snížení počtu odkazů, například pro jeho vrácení volajícímu.

Syntaxe

T* detach() noexcept;

Návratová hodnota

Ukazatel na rozhraní nebo objekt, na který odkazuje objekt com_ptr .

com_ptr::get – funkce

Vrátí základní nezpracovaný ukazatel, pokud jej potřebujete předat funkci. Na vrácený ukazatel můžete volat AddRef, Release nebo QueryInterface .

Syntaxe

T* get() const noexcept;

Návratová hodnota

Ukazatel na rozhraní nebo objekt, na který odkazuje objekt com_ptr .

Funkce com_ptr::p ut

Vrátí adresu podkladového nezpracovaného ukazatele, který má být předán funkci, která vyplní hodnotu. Tato funkce umožňuje volat metody (například metody modelu COM), které vracejí odkazy jako výstupní parametry prostřednictvím ukazatele na ukazatel.

Syntaxe

T** put() noexcept;

Návratová hodnota

Adresa podkladového nezpracovaného ukazatele.

Funkce com_ptr::p ut_void

Vrátí adresu podkladového nezpracovaného ukazatele jako ukazatel na ukazatel na void a předá jej funkci (například metodám COM), která vrací odkazy jako výstupní parametry prostřednictvím ukazatele na ukazatel na void.

Syntaxe

void** put_void() noexcept;

Návratová hodnota

Adresa podkladového nezpracovaného ukazatele jako ukazatele na ukazatel na void.

Funkce com_ptr::try_as

Vrátí požadované rozhraní, pokud je podporováno. Vrátí nullptr (přetížení -returning auto) nebo false (přetížení -returning), boolpokud tomu tak není. Tato funkce je užitečná, pokud se chcete dotazovat na rozhraní, které nemusíte předávat zpět volajícímu.

Syntaxe

template <typename To> auto try_as() const noexcept;
template <typename To> bool try_as(To& to) const noexcept;

Parametry šablony

typename To Typ požadovaného rozhraní.

Parametry

to Odkaz na hodnotu pro příjem požadovaného rozhraní.

Návratová hodnota

com_ptr odkazující na požadované rozhraní nebo inteligentní ukazatel silného typu pro požadované rozhraní (buď deklarovaný jazykem C++/WinRT nebo třetí stranou), pokud je požadované rozhraní podporováno, jinak nullptr (přetížení -returningauto) nebo false (přetížení -returningbool).

Funkce com_ptr::try_capture

Verze com_ptr::capture , která nevyvolá chybu, ale místo toho vrátí, pokud true je úspěšná nebo false ne.

Podívejte se také na šablonu funkce winrt::try_capture.

com_ptr::operator bool

Zkontroluje, zda inteligentní ukazatel odkazuje na rozhraní nebo objekt. Pokud inteligentní ukazatel neodkazuje na rozhraní nebo objekt, pak má logicky hodnotu null; jinak logicky není null.

Syntaxe

explicit operator bool() const noexcept;

Návratová hodnota

true Pokud inteligentní ukazatel odkazuje na rozhraní nebo objekt (logicky nemá hodnotu null), jinak false (logicky nemá hodnotu null).

com_ptr::operator* (operátor dereference)

Vrátí odkaz na cíl com_ptr, abyste jej mohli předat funkci, která očekává odkaz na cílový typ T.

Syntaxe

T& operator*() const noexcept;

Návratová hodnota

Odkaz na cíl com_ptr.

com_ptr::operator= (operátor přiřazení)

Přiřadí hodnotu objektu com_ptr .

Syntaxe

winrt::com_ptr& operator=(winrt::com_ptr const& other) noexcept;
template <typename U> winrt::com_ptr& operator=(winrt::com_ptr<U> const& other) noexcept;
template <typename U> winrt::com_ptr& operator=(winrt::com_ptr<U>&& other) noexcept;

Parametry šablony

typename U Typ, na který odkazuje přiřazená hodnota.

Parametry

other Hodnota com_ptr , která se má přiřadit k objektu com_ptr . Parametr T musí být převoditelný na objekt Tcom_ptr .

Návratová hodnota

Odkaz na objekt com_ptr .

com_ptr::operator-> (operátor šipky)

Aby bylo možné poskytnout přístup k odkazovanému rozhraní nebo metodám objektu, vrátí základní nezpracovaný ukazatel. Na vrácený ukazatel nemůžete volat AddRef ani Release , ale můžete volat QueryInterface.

Syntaxe

auto operator->() const noexcept;

Návratová hodnota

Ukazatel na rozhraní nebo objekt, na který odkazuje objekt com_ptr .

funkce attach_abi

Připojí com_ptr objekt k nezpracovanému ukazateli, který vlastní odkaz na svůj cíl; Další odkaz není přidán. V případě potřeby můžete tuto funkci použít ke sloučení odkazů.

Syntaxe

void attach_abi(winrt::com_ptr<T>& object, T* value) noexcept;

Parametry

object com_ptr objekt, se kterým se má pracovat.

value Nezpracovaný ukazatel, který vlastní odkaz na svůj cíl.

detach_abi

Odpojí com_ptr objekt od jeho nezpracovaného rozhraní bez snížení počtu odkazů, například pro jeho vrácení volajícímu.

Syntaxe

auto detach_abi(winrt::com_ptr<T>& object) noexcept;

Parametry

object com_ptr objekt, se kterým se má pracovat.

Návratová hodnota

Ukazatel na nezpracované rozhraní, na které odkazuje objekt com_ptr .

operator!= (operátor nerovnosti)

Vrátí hodnotu označující, zda tyto dva parametry odkazují na různé cíle.

Syntaxe

template <typename T> bool operator!=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
template <typename T> bool operator!=(winrt::com_ptr<T> const& left, std::nullptr_t) noexcept;
template <typename T> bool operator!=(std::nullptr_t, winrt::com_ptr<T> const& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž adresa paměti cíle se má porovnat s adresou paměti druhého parametru.

Návratová hodnota

true Pokud tyto dva parametry ukazují na různé cíle, jinak false.

operátor< (operátor menší než)

Vrátí hodnotu označující, zda se cíl prvního parametru vyskytuje v paměti dříve než cíl druhého parametru.

Syntaxe

template <typename T> bool operator<(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž adresa paměti cíle se má porovnat s adresou paměti druhého parametru.

Návratová hodnota

true pokud je adresa paměti cíle prvního parametru menší než adresa paměti druhého parametru, jinak false.

operator<= (operátor menší než nebo rovno)

Vrátí hodnotu označující, zda se cíl prvního parametru vyskytuje dříve v paměti než cíl druhého parametru, nebo na stejném místě jako druhý parametr.

Syntaxe

template <typename T> bool operator<=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž adresa paměti cíle se má porovnat s adresou paměti druhého parametru.

Návratová hodnota

true Pokud je adresa paměti cíle prvního parametru menší nebo rovna adrese paměti druhého parametru, jinak false.

operator== (operátor rovnosti)

Vrací hodnotu označující, zda tyto dva parametry odkazují na stejné rozhraní nebo objekt.

Syntaxe

template <typename T> bool operator==(winrt::com_ptr<T> const& left, std::nullptr_t) noexcept;
template <typename T> bool operator==(std::nullptr_t, winrt::com_ptr<T> const& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž adresa paměti cíle se má porovnat s adresou paměti druhého parametru.

Návratová hodnota

true Pokud tyto dva parametry ukazují na stejný cíl, jinak false.

operátor> (operátor větší než)

Vrátí hodnotu označující, zda se cíl prvního parametru vyskytne v paměti později než cíl druhého parametru.

Syntaxe

template <typename T> bool operator>(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž adresa paměti cíle se má porovnat s adresou paměti druhého parametru.

Návratová hodnota

true Pokud je adresa paměti cíle prvního parametru větší než adresa paměti druhého parametru, jinak false.

operator>= (operátor větší nebo rovno)

Vrátí hodnotu označující, zda se cíl prvního parametru vyskytne později v paměti než cíl druhého parametru, nebo na stejném místě jako druhý parametr.

Syntaxe

template <typename T> bool operator>=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž adresa paměti cíle se má porovnat s adresou paměti druhého parametru.

Návratová hodnota

true Pokud je adresa paměti cíle prvního parametru větší nebo rovna adrese paměti druhého parametru, jinak false.

swap – funkce

Prohodí obsah dvou com_ptr parametrů tak, aby ukazovaly na cíl druhého typu.

Syntaxe

void swap(winrt::com_ptr& left, winrt::com_ptr& right) noexcept;

Parametry

left right Hodnota com_ptr , jejíž ukazatel se má vzájemně prohodit s ukazatelem druhého parametru.

Viz také