Aracılığıyla paylaş


winrt::com_ptr yapı şablonu (C++/WinRT)

Başvuru sayılan bir COM akıllı işaretçi şablonu. com_ptr , şablon parametresi tarafından belirtilen arabirim veya çalışma zamanı sınıfı uygulama türüne yönelik bir işaretçiyi temsil eder. Özel bir ham işaretçi aracılığıyla hedefi için referans sayısını otomatik olarak yönetir.

Sözdizimi

template <typename T>
struct com_ptr

Şablon parametreleri

typename T com_ptr tarafından temsil edilen bir işaretçi olan arabirim veya çalışma zamanı sınıfı uygulama türü. Bu, akıllı işaretçinin hedefinin türüdür.

Gereksinimler

Desteklenen en düşük SDK: Windows SDK sürüm 10.0.17134.0 (Windows 10, sürüm 1803)

Ad alanı: winrt

Başlık: WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h %WindowsSdkDir%Include<(varsayılan olarak eklenir)

Üye türü diğer adları

Takma ad Türü
com_ptr::Tür Şablon parametresinin uygulama tanımlı gösteriminin eşanlamlısı typename T .

Kurucular

Yapıcı Açıklama
com_ptr::com_ptr yapıcı İsteğe bağlı olarak giriş verilerinin bir kopyası veya taşınması ile com_ptr yapısının yeni bir örneğini başlatır.

Üye işlevleri

İşlev Açıklama
com_ptr::fonksiyon olarak Destekleniyorsa, istenen arabirimi döndürür. Değilse atar.
com_ptr::attach işlevi Hedefine referansı olan ham bir işaretçiye bağlanır; Ek bir başvuru eklenmez.
com_ptr::Yakalama İşlevi Belirtilen bir işlevi veya yöntemi çağırır (üzerinde winrt::check_hresult otomatik olarak çağırır) ve işlev veya yöntemden çıkan arabirim işaretçisini bir void**.
com_ptr::copy_from işlevi Başka bir işaretçiden kopyalar. Şu anda başvurulan herhangi bir arabirim veya nesnedeki başvuru sayısını azaltır, ham işaretçi parametresini kopyalar ve işaret ettiği arabirimin veya nesnenin ömrünü yönetmeye başlar.
com_ptr::copy_to işlevi com_ptr nesneden başka bir işaretçiye kopyalar. Şu anda başvurulan herhangi bir arabirim veya nesnedeki başvuru sayısını artırır ve bu arabirimin veya nesnenin bellek adresini parametreye kopyalar.
com_ptr::d etach fonksiyonu Başvuru sayısını azaltmadan, belki de bir arayana geri döndürmek için, başvurulan arabirimden veya nesneden ayrılır.
com_ptr::get işlevi Bir işleve geçirmeniz gerekmesi durumunda temel alınan ham işaretçiyi döndürür.
com_ptr::p ut işlevi Temel alınan ham işaretçinin adresini döndürür; bu işlev, başvuruları bir işaretçi aracılığıyla çıkış parametreleri olarak döndüren yöntemleri (COM yöntemleri gibi) çağırmanıza yardımcı olur.
com_ptr::p ut_void işlevi Temel alınan ham işaretçinin adresini, geçersiz kılınacak bir işaretçiye işaretçi olarak döndürür; bu işlev, başvuruları bir işaretçi aracılığıyla void işaretçisine out parametreleri olarak döndüren yöntemleri (COM yöntemleri gibi) çağırmanıza yardımcı olur.
com_ptr::try_as işlevi Destekleniyorsa, istenen arabirimi döndürür. döndürür nullptr, veya falsedeğilse .
com_ptr::try_capture işlevi com_ptr::capture'ın başarısızlığa uğramayan, ancak başarılı olduğunda veya false olmadığında geri dönen true bir sürümü.

Üye operatörler

Operatör Açıklama
com_ptr::operatör bool Akıllı işaretçinin bir arabirime veya nesneye referans verip vermediğini kontrol eder.
com_ptr::operator* (yönlendirme operatörü) com_ptr hedefine bir başvuru döndürür, böylece bu başvuruyu T hedef türüne başvuru bekleyen bir işleve geçirebilirsiniz.
com_ptr::operator= (atama operatörü) com_ptr nesneye bir değer atar.
com_ptr::operator-> (ok operatörü) Başvurulan arabirime veya nesnenin yöntemlerine erişim sağlamak için, temel alınan ham işaretçiyi döndürür.

Ücretsiz fonksiyonlar

İşlev Açıklama
attach_abi işlevi Bir com_ptr nesnesini, hedefine yönelik bir başvuruya sahip olan ham bir işaretçiye ekler; Ek bir başvuru eklenmez.
detach_abi işlevi Başvuru sayısını azaltmadan, belki de bir arayana geri döndürmek için bir com_ptr nesnesini ham arabiriminden ayırır.
Takas İşlevi İki com_ptr parametresinin içeriğini , birbirlerinin hedefini gösterecek şekilde değiştirir.

Ücretsiz operatörler

İşlev Açıklama
operator!= (eşitsizlik operatörü) İki parametrenin farklı hedeflere başvurup başvurmadığını belirten bir değer döndürür.
Operatör< (Küçüktür operatörü) İlk parametrenin hedefinin bellekte ikinci parametreninkinden daha önce oluşup oluşmadığını belirten bir değer döndürür.
operator<= (küçüktür veya eşittir operatörü) İlk parametrenin hedefinin bellekte ikinci parametreden daha önce mi yoksa ikinci parametreyle aynı konumda mı oluştuğunu gösteren bir değer döndürür.
operator== (eşitlik operatörü) İki parametrenin aynı arabirime ve/veya nesneye başvurup başvurmadığını belirten bir değer döndürür.
operatör> (büyüktür operatörü) İlk parametrenin hedefinin bellekte ikinci parametreninkinden daha sonra oluşup oluşmadığını belirten bir değer döndürür.
operator>= (büyüktür veya eşittir operatörü) İlk parametrenin hedefinin bellekte ikinci parametreden daha sonra mı yoksa ikinci parametreyle aynı konumda mı oluştuğunu gösteren bir değer döndürür.

com_ptr::com_ptr yapıcı

İsteğe bağlı olarak giriş verilerinin bir kopyası veya taşınması ile com_ptr yapısının yeni bir örneğini başlatır.

Yapıcı void* bir T* alır ve mülkiyeti üstlenir. winrt::take_ownership_from_abi_t , bu işaretçiyi serbest bırakma sorumluluğunu açıkça belirten bir işaretçi türüdür ve artık com_ptr aktarılmaktadır. Yeniden sayım tam olarak 1 olmak zorunda değildir; sadece sorumluluğun aktarıldığını söylüyor.

Sözdizimi

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;

Şablon parametreleri

typename U Giriş akıllı işaretçisi tarafından işaret edilen hedef türü.

Parametreler

other com_ptr nesnesini başlatan başka bir com_ptr. Parametrenin T'si , com_ptr nesnenin T'sine dönüştürülebilir olmalıdır.

com_ptr::fonksiyon olarak

Destekleniyorsa, istenen arabirimi döndürür. Değilse atar. Bu işlev, arayana geri iletmeniz gerekmeyen bir arabirimi sorgulamak istediğinizde kullanışlıdır.

Kod örnekleri için, Yansıtılan türleri ve arabirimleri başlatma ve döndürme bölümüne ve bu konudaki diğer bölümlere bakın.

Sözdizimi

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

Şablon parametreleri

typename To İstenen arabirimin türü.

Parametreler

to İstenen arabirimi almak için bir değere başvuru.

Dönüş değeri

İstenen arabirime başvuran bir com_ptr veya istenen arabirim için kesin olarak yazılmış bir akıllı işaretçi (C++/WinRT veya üçüncü bir tarafça bildirilir).

com_ptr::attach işlevi

Hedefine referansı olan ham bir işaretçiye bağlanır; Ek bir başvuru eklenmez. Gerekirse, başvuruları birleştirmek için bu işlevi kullanabilirsiniz.

Sözdizimi

void attach(T* value) noexcept;

Parametreler

value Hedefine bir başvuruya sahip olan ham bir işaretçi.

com_ptr::Yakalama İşlevi

Belirtilen bir işlevi veya yöntemi çağırır (üzerinde winrt::check_hresult otomatik olarak çağırır) ve işlev veya yöntemden çıkan arabirim işaretçisini bir void**.

Ayrıca winrt::capture işlev şablonuna bakın.

Sözdizimi

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);

Şablon parametreleri

typename F Free işlevi veya std::function gibi bir işlev nesnesi türü.

typename O Bir arabirim türü.

typename M Bir yöntem türü.

typename Args Sıfır veya daha fazla bağımsız değişken türü.

Parametreler

function türünde bir işlev nesnesi F.

p Türündeki Obir nesnenin işaretçisi.

object Bir winrt::com_ptr türünde O.

methodtüründe bir yöntem (tarafından OMuygulanır) .

args Sıfır veya daha fazla türde Argsbağımsız değişken.

Açıklamalar

  • Aşırı capture(F function, Args&&...args) yükleme, işlev nesnesini çağırır.
  • Aşırı capture(O* p, M method, Args&& ...args) yükleme, işaretçideki yöntemi çağırır.
  • Aşırı capture(winrt::com_ptr<O> const& object, M method, Args&&...args) yükleme, nesne üzerindeki yöntemi çağırır.

Tüm aşırı yüklemeler, sağladığınız tüm ek bağımsız değişkenleri (çağrılana) geçirir. Tüm aşırı yüklemeler, bu tür çağrıların gerektirdiği iki ek bağımsız değişkeni de iletir—özellikle, bir REFIID ( winrt::com_ptr hedefinin kimliği) ve bir void** ( winrt::com_ptr hedefine giden bir işaretçinin adresi).

Örnek

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

com_ptr::copy_from işlevi

Başka bir işaretçiden kopyalar. Şu anda başvurulan herhangi bir arabirim veya nesnedeki başvuru sayısını azaltır, ham işaretçi parametresini kopyalar ve işaret ettiği arabirimin veya nesnenin ömrünü yönetmeye başlar.

Sözdizimi

void copy_from(T* other) noexcept;

Parametreler

other Yaşam süresi com_ptr nesnesi tarafından yönetilmesi gereken bir hedefin ham işaretçisi.

com_ptr::copy_to işlevi

com_ptr nesneden başka bir işaretçiye kopyalar. Şu anda başvurulan herhangi bir arabirim veya nesnedeki başvuru sayısını artırır ve bu arabirimin veya nesnenin bellek adresini parametreye kopyalar. Bu işlev, QueryInterface'i çağırmadan aynı arabirime bir başvuru dağıtmanızı sağlar.

Sözdizimi

void copy_to(T** other) const noexcept;

Parametreler

other Ham bir işaretçinin adresi; işaretçiyi com_ptr nesnenin hedefine kopyalamak için.

com_ptr::d etach fonksiyonu

Başvuru sayısını azaltmadan, belki de bir arayana geri döndürmek için, başvurulan arabirimden veya nesneden ayrılır.

Sözdizimi

T* detach() noexcept;

Dönüş değeri

com_ptr nesnesi tarafından başvurulan arabirim veya nesne işaretçisi.

com_ptr::get işlevi

Bir işleve geçirmeniz gerekmesi durumunda temel alınan ham işaretçiyi döndürür. Döndürülen işaretçide AddRef, Release veya QueryInterface'i çağırabilirsiniz.

Sözdizimi

T* get() const noexcept;

Dönüş değeri

com_ptr nesnesi tarafından başvurulan arabirim veya nesne işaretçisi.

com_ptr::p ut işlevi

Değeri dolduracak bir işleve geçirilecek temel ham işaretçinin adresini döndürür; bu işlev, başvuruları bir işaretçi aracılığıyla çıkış parametreleri olarak döndüren yöntemleri (COM yöntemleri gibi) çağırmanıza yardımcı olur.

Sözdizimi

T** put() noexcept;

Dönüş değeri

Temel alınan ham işaretçinin adresi.

com_ptr::p ut_void işlevi

Temel alınan ham işaretçinin adresini, bir işaretçi aracılığıyla void işaretçisine başvuruları out parametreleri olarak döndüren bir işleve (COM yöntemleri gibi) geçirmek için bir işaretçi olarak void işaretçisine döndürür.

Sözdizimi

void** put_void() noexcept;

Dönüş değeri

Void işaretçisine işaretçi olarak temel alınan ham işaretçinin adresi.

com_ptr::try_as işlevi

Destekleniyorsa, istenen arabirimi döndürür. Döndürülür nullptr ( auto-geri dönen aşırı yük) veya false değilse ( bool-geri dönen aşırı yük). Bu işlev, arayana geri iletmeniz gerekmeyen bir arabirimi sorgulamak istediğinizde kullanışlıdır.

Sözdizimi

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

Şablon parametreleri

typename To İstenen arabirimin türü.

Parametreler

to İstenen arabirimi almak için bir değere başvuru.

Dönüş değeri

İstenen arabirime başvuran bir com_ptr veya istenen arabirim destekleniyorsa istenen arabirim için kesin olarak belirlenmiş bir akıllı işaretçi (C++/WinRT veya üçüncü bir tarafça bildirilir), aksi takdirde nullptr ( auto-dönen aşırı yük) veya false (- booldönen aşırı yük).

com_ptr::try_capture işlevi

com_ptr::capture'ın başarısızlığa uğramayan, ancak başarılı olduğunda veya false olmadığında geri dönen true bir sürümü.

Ayrıca winrt::try_capture işlev şablonuna bakın.

com_ptr::operatör bool

Akıllı işaretçinin bir arabirime veya nesneye referans verip vermediğini kontrol eder. Akıllı işaretçi bir arabirime veya nesneye başvurmuyorsa, mantıksal olarak boştur; aksi takdirde mantıksal olarak boş değildir.

Sözdizimi

explicit operator bool() const noexcept;

Dönüş değeri

true Akıllı işaretçi bir arabirime veya nesneye başvuruyorsa (mantıksal olarak null değil), aksi takdirde false (mantıksal olarak null).

com_ptr::operator* (yönlendirme operatörü)

com_ptr hedefine bir başvuru döndürür, böylece bu başvuruyu T hedef türüne başvuru bekleyen bir işleve geçirebilirsiniz.

Sözdizimi

T& operator*() const noexcept;

Dönüş değeri

com_ptr'nin hedefine bir referans.

com_ptr::operator= (atama operatörü)

com_ptr nesneye bir değer atar.

Sözdizimi

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;

Şablon parametreleri

typename U Atanan değerin işaret ettiği tür.

Parametreler

other com_ptr nesnesine atanacak com_ptr bir değer. Parametrenin T'si , com_ptr nesnenin T'sine dönüştürülebilir olmalıdır.

Dönüş değeri

com_ptr nesnesine bir başvuru.

com_ptr::operator-> (ok operatörü)

Başvurulan arabirime veya nesnenin yöntemlerine erişim sağlamak için, temel alınan ham işaretçiyi döndürür. Döndürülen işaretçide AddRef veya Release öğesini çağıramazsınız, ancak QueryInterface'i çağırabilirsiniz.

Sözdizimi

auto operator->() const noexcept;

Dönüş değeri

com_ptr nesnesi tarafından başvurulan arabirim veya nesne işaretçisi.

attach_abi işlevi

Bir com_ptr nesnesini, hedefine yönelik bir başvuruya sahip olan ham bir işaretçiye ekler; Ek bir başvuru eklenmez. Gerekirse, başvuruları birleştirmek için bu işlevi kullanabilirsiniz.

Sözdizimi

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

Parametreler

object Üzerinde çalışılması com_ptr bir nesne.

value Hedefine bir başvuruya sahip olan ham bir işaretçi.

detach_abi işlevi

Başvuru sayısını azaltmadan, belki de bir arayana geri döndürmek için bir com_ptr nesnesini ham arabiriminden ayırır.

Sözdizimi

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

Parametreler

object Üzerinde çalışılması com_ptr bir nesne.

Dönüş değeri

com_ptr nesnesi tarafından başvurulan ham arabirimin işaretçisi.

operator!= (eşitsizlik operatörü)

İki parametrenin farklı hedeflere başvurup başvurmadığını belirten bir değer döndürür.

Sözdizimi

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;

Parametreler

left right Hedefin bellek adresi diğer parametreninkiyle karşılaştırılacak bir com_ptr değeri.

Dönüş değeri

true İki parametre farklı hedeflere işaret ediyorsa, aksi takdirde false.

Operatör< (Küçüktür operatörü)

İlk parametrenin hedefinin bellekte ikinci parametreninkinden daha önce oluşup oluşmadığını belirten bir değer döndürür.

Sözdizimi

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

Parametreler

left right Hedefin bellek adresi diğer parametreninkiyle karşılaştırılacak bir com_ptr değeri.

Dönüş değeri

true İlk parametrenin hedefinin bellek adresi ikinci parametreninkinden küçükse, aksi takdirde false.

operator<= (küçüktür veya eşittir operatörü)

İlk parametrenin hedefinin bellekte ikinci parametreden daha önce mi yoksa ikinci parametreyle aynı konumda mı oluştuğunu gösteren bir değer döndürür.

Sözdizimi

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

Parametreler

left right Hedefin bellek adresi diğer parametreninkiyle karşılaştırılacak bir com_ptr değeri.

Dönüş değeri

true İlk parametrenin hedefinin bellek adresi ikinci parametreninkinden küçük veya ona eşitse, aksi takdirde false.

operator== (eşitlik operatörü)

İki parametrenin aynı arabirime ve/veya nesneye başvurup başvurmadığını belirten bir değer döndürür.

Sözdizimi

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;

Parametreler

left right Hedefin bellek adresi diğer parametreninkiyle karşılaştırılacak bir com_ptr değeri.

Dönüş değeri

true iki parametre aynı hedefi gösteriyorsa, aksi takdirde false.

operatör> (büyüktür operatörü)

İlk parametrenin hedefinin bellekte ikinci parametreninkinden daha sonra oluşup oluşmadığını belirten bir değer döndürür.

Sözdizimi

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

Parametreler

left right Hedefin bellek adresi diğer parametreninkiyle karşılaştırılacak bir com_ptr değeri.

Dönüş değeri

true İlk parametrenin hedefinin bellek adresi ikinci parametreninkinden büyükse, aksi takdirde false.

operator>= (büyüktür veya eşittir operatörü)

İlk parametrenin hedefinin bellekte ikinci parametreden daha sonra mı yoksa ikinci parametreyle aynı konumda mı oluştuğunu gösteren bir değer döndürür.

Sözdizimi

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

Parametreler

left right Hedefin bellek adresi diğer parametreninkiyle karşılaştırılacak bir com_ptr değeri.

Dönüş değeri

true İlk parametrenin hedefinin bellek adresi ikinci parametreninkinden büyük veya ona eşitse, aksi takdirde false.

swap işlevi

İki com_ptr parametresinin içeriğini , birbirlerinin hedefini gösterecek şekilde değiştirir.

Sözdizimi

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

Parametreler

left right İşaretçisi diğer parametreninkiyle karşılıklı olarak değiştirilecek bir com_ptr değeri.

Ayrıca bakınız