Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Š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é
- jmenný prostor winrt
- Práce s rozhraními API v C++/WinRT