Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Templat penunjuk pintar COM yang dihitung referensi. com_ptr mewakili penunjuk ke antarmuka atau jenis implementasi kelas runtime yang ditentukan oleh parameter templat. Ini secara otomatis mengelola jumlah referensi untuk targetnya melalui pointer mentah privat.
Sintaksis
template <typename T>
struct com_ptr
Parameter templat
typename T Antarmuka, atau jenis implementasi kelas runtime, penunjuk yang diwakili oleh com_ptr. Ini adalah jenis target penunjuk pintar.
Persyaratan
SDK minimum yang didukung: Windows SDK versi 10.0.17134.0 (Windows 10, versi 1803)
Ruang nama: winrt
Header: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (disertakan secara default)
Alias jenis anggota
| Nama alias | Jenis |
|---|---|
| com_ptr::tipe | Sinonim untuk representasi typename T parameter template yang ditentukan implementasi. |
Konstruktor
| Pembangun | Deskripsi |
|---|---|
| com_ptr::com_ptr konstruktor | Menginisialisasi instans baru dari struktur com_ptr , secara opsional dengan salinan atau pemindahan data input. |
Fungsi anggota
| Fungsi | Deskripsi |
|---|---|
| com_ptr::sebagai fungsi | Mengembalikan antarmuka yang diminta, jika didukung. Melempar jika tidak. |
| com_ptr:: lampirkan fungsi | Melampirkan ke pointer mentah yang memiliki referensi ke targetnya; referensi tambahan tidak ditambahkan. |
| com_ptr::fungsi tangkap | Memanggil fungsi atau metode tertentu (secara otomatis memanggil winrt::check_hresult di atasnya), dan menangkap penunjuk antarmuka yang dikeluarkan dari fungsi atau metode sebagai void**. |
| com_ptr::copy_from fungsi | Menyalin dari pointer lain. Mengurangi jumlah referensi pada antarmuka atau objek yang saat ini direferensikan, menyalin parameter pointer mentah, dan mulai mengelola masa pakai antarmuka atau objek yang ditunjukkan olehnya. |
| com_ptr::copy_to fungsi | Menyalin ke penunjuk lain dari objek com_ptr . Menaikkan jumlah referensi pada antarmuka atau objek yang saat ini direferensikan, dan menyalin antarmuka atau alamat memori objek tersebut ke dalam parameter . |
| com_ptr: :d fungsi etach | Melepaskan dari antarmuka atau objek yang direferensikan tanpa mengurangi jumlah referensi, mungkin untuk mengembalikannya ke pemanggil. |
| com_ptr::get fungsi | Mengembalikan penunjuk mentah yang mendasar jika Anda perlu meneruskannya ke fungsi. |
| com_ptr::p fungsi ut | Mengembalikan alamat penunjuk mentah yang mendasar; fungsi ini membantu Anda memanggil metode (seperti metode COM) yang mengembalikan referensi sebagai parameter keluar melalui penunjuk ke penunjuk. |
| com_ptr::p ut_void | Mengembalikan alamat penunjuk mentah yang mendasarinya sebagai penunjuk ke penunjuk ke void; fungsi ini membantu Anda memanggil metode (seperti metode COM) yang mengembalikan referensi sebagai parameter keluar melalui penunjuk ke penunjuk untuk membatalkan. |
| com_ptr::try_as fungsi | Mengembalikan antarmuka yang diminta, jika didukung. Mengembalikan nullptr, atau false, jika tidak. |
| com_ptr::try_capture fungsi | Versi com_ptr:capture yang tidak melemparkan kegagalan tetapi mengembalikan pengembalian true jika berhasil atau false jika tidak. |
Operator anggota
| Pengoperasi | Deskripsi |
|---|---|
| com_ptr::operator bool | Memeriksa apakah penunjuk pintar mereferensikan antarmuka atau objek atau tidak. |
| com_ptr::operator* (operator indirection) | Mengembalikan referensi ke target com_ptr sehingga Anda dapat meneruskannya ke fungsi yang mengharapkan referensi ke jenis target T. |
| com_ptr::operator= (operator penetapan) | Menetapkan nilai ke objek com_ptr . |
| com_ptr::operator-> (operator panah) | Untuk membeli akses ke antarmuka yang dirujuk atau metode objek, mengembalikan pointer mentah yang mendasar. |
Fungsi gratis
| Fungsi | Deskripsi |
|---|---|
| attach_abi fungsi | Melampirkan objek com_ptr ke penunjuk mentah yang memiliki referensi ke targetnya; referensi tambahan tidak ditambahkan. |
| detach_abi fungsi | Melepaskan objek com_ptr dari antarmuka mentahnya tanpa mengurangi jumlah referensi, mungkin untuk mengembalikannya ke penelepon. |
| fungsi swap | Menukar isi dari dua parameter com_ptr sehingga saling mengarah ke target satu sama lain. |
Operator gratis
| Fungsi | Deskripsi |
|---|---|
| operator!= (operator ketidaksetaraan) | Mengembalikan nilai yang menunjukkan apakah kedua parameter merujuk ke target yang berbeda. |
| operator< (operator kurang dari) | Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi lebih awal dalam memori daripada parameter kedua. |
| operator<= (kurang dari-atau-sama dengan) | Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi lebih awal dalam memori daripada, atau di lokasi yang sama dengan, parameter kedua. |
| operator== (operator kesetaraan) | Mengembalikan nilai yang menunjukkan apakah kedua parameter merujuk ke antarmuka dan/atau objek yang sama. |
| operator> (operator yang lebih besar dari) | Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi nanti dalam memori daripada parameter kedua. |
| operator>= (operator yang lebih besar dari-atau-sama dengan) | Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi nanti dalam memori daripada, atau di lokasi yang sama dengan, parameter kedua. |
konstruktor com_ptr::com_ptr
Menginisialisasi instans baru dari struktur com_ptr , secara opsional dengan salinan atau pemindahan data input.
void* Konstruktor mengambil T*, dan mengambil alih kepemilikan.
winrt::take_ownership_from_abi_t adalah jenis penanda yang membuat eksplisit tanggung jawab untuk melepaskan penunjuk ini sekarang ditransfer ke com_ptr. Refcount tidak harus tepat 1; Itu hanya mengatakan bahwa tanggung jawab sedang ditransfer.
Sintaksis
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;
Parameter templat
typename U Jenis target yang ditunjuk oleh penunjuk pintar input.
Parameter
other
com_ptr lain yang menginisialisasi objek com_ptr.
T parameter harus dapat dikonversi ke T objek com_ptr.
fungsi com_ptr::as
Mengembalikan antarmuka yang diminta, jika didukung. Melempar jika tidak. Fungsi ini berguna jika Anda ingin mengkueri antarmuka yang tidak perlu Anda teruskan kembali ke pemanggil Anda.
Untuk contoh kode, lihat bagian Membuat instance dan mengembalikan jenis dan antarmuka yang diproyeksikan, dan bagian lain dalam topik tersebut.
Sintaksis
template <typename To> auto as() const;
template <typename To> void as(To& to) const;
Parameter templat
typename To Jenis antarmuka yang diminta.
Parameter
to Referensi ke nilai untuk menerima antarmuka yang diminta.
Mengembalikan nilai
com_ptr yang mereferensikan antarmuka yang diminta, atau penunjuk pintar yang diketik dengan kuat untuk antarmuka yang diminta (baik dideklarasikan oleh C++/WinRT atau oleh pihak ketiga).
com_ptr::lampirkan fungsi
Melampirkan ke pointer mentah yang memiliki referensi ke targetnya; referensi tambahan tidak ditambahkan. Jika diperlukan, Anda dapat menggunakan fungsi ini untuk menyaring referensi.
Sintaksis
void attach(T* value) noexcept;
Parameter
value Penunjuk mentah yang memiliki referensi ke targetnya.
fungsi com_ptr::capture
Memanggil fungsi atau metode tertentu (secara otomatis memanggil winrt::check_hresult di atasnya), dan menangkap penunjuk antarmuka yang dikeluarkan dari fungsi atau metode sebagai void**.
Lihat juga templat fungsi winrt::capture.
Sintaksis
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);
Parameter templat
typename F Jenis objek fungsi, seperti fungsi bebas, atau std::function.
typename O Jenis antarmuka.
typename M Jenis metode.
typename Args Jenis argumen nol atau lebih.
Parameter
function Objek fungsi jenis F.
p Penunjuk ke objek jenis O.
objectTipe Owinrt::com_ptr .
method Metode (diimplementasikan oleh O) jenis M.
args Nol atau lebih argumen jenis Args.
Komentar
- Kelebihan
capture(F function, Args&&...args)beban memanggil objek fungsi. - Kelebihan
capture(O* p, M method, Args&& ...args)beban memanggil metode pada penunjuk. -
capture(winrt::com_ptr<O> const& object, M method, Args&&...args)Kelebihan beban memanggil metode pada objek.
Semua kelebihan beban melewati (ke pemanggilan) argumen tambahan apa pun yang Anda berikan. Semua kelebihan beban juga meneruskan dua argumen tambahan yang diperlukan oleh pemanggil tersebut—khususnya, REFIID (ID target winrt::com_ptr), dan void** (Alamat penunjuk ke target winrt::com_ptr).
Contoh
winrt::com_ptr<IDXGIAdapter> adapter
...
winrt::com_ptr<IDXGIFactory2> factory;
factory.capture(adapter, &IDXGIAdapter::GetParent);
fungsi com_ptr::copy_from
Menyalin dari pointer lain. Mengurangi jumlah referensi pada antarmuka atau objek yang saat ini direferensikan, menyalin parameter pointer mentah, dan mulai mengelola masa pakai antarmuka atau objek yang ditunjukkan olehnya.
Sintaksis
void copy_from(T* other) noexcept;
Parameter
other Penunjuk mentah ke target yang masa pakainya harus dikelola oleh objek com_ptr .
fungsi com_ptr::copy_to
Menyalin ke penunjuk lain dari objek com_ptr . Menaikkan jumlah referensi pada antarmuka atau objek yang saat ini direferensikan, dan menyalin antarmuka atau alamat memori objek tersebut ke dalam parameter . Fungsi ini memungkinkan Anda membagikan referensi ke antarmuka yang sama tanpa memanggil QueryInterface.
Sintaksis
void copy_to(T** other) const noexcept;
Parameter
other Alamat penunjuk mentah; untuk menyalin penunjuk ke target objek com_ptr .
fungsi com_ptr::d etach
Melepaskan dari antarmuka atau objek yang direferensikan tanpa mengurangi jumlah referensi, mungkin untuk mengembalikannya ke pemanggil.
Sintaksis
T* detach() noexcept;
Mengembalikan nilai
Penunjuk ke antarmuka atau objek yang direferensikan oleh objek com_ptr .
com_ptr::get fungsi
Mengembalikan penunjuk mentah yang mendasar jika Anda perlu meneruskannya ke fungsi. Anda dapat memanggil AddRef, Release, atau QueryInterface pada penunjuk yang ditampilkan.
Sintaksis
T* get() const noexcept;
Mengembalikan nilai
Penunjuk ke antarmuka atau objek yang direferensikan oleh objek com_ptr .
fungsi com_ptr::p ut
Mengembalikan alamat penunjuk mentah yang mendasarinya untuk diteruskan ke fungsi yang akan mengisi nilai; fungsi ini membantu Anda memanggil metode (seperti metode COM) yang mengembalikan referensi sebagai parameter keluar melalui penunjuk ke penunjuk.
Sintaksis
T** put() noexcept;
Mengembalikan nilai
Alamat penunjuk mentah yang mendasar.
fungsi com_ptr::p ut_void
Mengembalikan alamat penunjuk mentah yang mendasarinya sebagai penunjuk ke penunjuk ke void untuk meneruskannya ke fungsi (seperti metode COM) yang mengembalikan referensi sebagai parameter keluar melalui penunjuk ke penunjuk ke void.
Sintaksis
void** put_void() noexcept;
Mengembalikan nilai
Alamat penunjuk mentah yang mendasarinya sebagai penunjuk ke penunjuk untuk membatalkan.
fungsi com_ptr::try_as
Mengembalikan antarmuka yang diminta, jika didukung. Mengembalikan nullptr ( autooverload -return), atau false ( booloverload -return), jika tidak. Fungsi ini berguna jika Anda ingin mengkueri antarmuka yang tidak perlu Anda teruskan kembali ke pemanggil Anda.
Sintaksis
template <typename To> auto try_as() const noexcept;
template <typename To> bool try_as(To& to) const noexcept;
Parameter templat
typename To Jenis antarmuka yang diminta.
Parameter
to Referensi ke nilai untuk menerima antarmuka yang diminta.
Mengembalikan nilai
com_ptr yang mereferensikan antarmuka yang diminta, atau penunjuk pintar yang diketik dengan kuat untuk antarmuka yang diminta (baik dideklarasikan oleh C++/WinRT atau oleh pihak ketiga), jika antarmuka yang diminta didukung, jika tidak nullptrauto(kelebihan beban -returning), atau false (boolkelebihan beban -returning).
fungsi com_ptr::try_capture
Versi com_ptr:capture yang tidak melemparkan kegagalan tetapi mengembalikan pengembalian true jika berhasil atau false jika tidak.
Lihat juga templat fungsi winrt::try_capture.
com_ptr::operator bool
Memeriksa apakah penunjuk pintar mereferensikan antarmuka atau objek atau tidak. Jika penunjuk pintar tidak mereferensikan antarmuka atau objek, maka secara logis null; jika tidak, secara logis tidak null.
Sintaksis
explicit operator bool() const noexcept;
Mengembalikan nilai
true Jika penunjuk pintar mereferensikan antarmuka atau objek (secara logis bukan null), sebaliknya false (null secara logis).
com_ptr::operator* (operator tidak langsung)
Mengembalikan referensi ke target com_ptr sehingga Anda dapat meneruskannya ke fungsi yang mengharapkan referensi ke jenis target T.
Sintaksis
T& operator*() const noexcept;
Mengembalikan nilai
Referensi ke target com_ptr.
com_ptr::operator= (operator penugasan)
Menetapkan nilai ke objek com_ptr .
Sintaksis
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;
Parameter templat
typename U Jenis yang ditunjuk oleh nilai yang ditetapkan.
Parameter
other Nilai com_ptr untuk ditetapkan ke objek com_ptr .
T parameter harus dapat dikonversi ke T objek com_ptr.
Mengembalikan nilai
Referensi ke objek com_ptr .
com_ptr::operator-> (operator panah)
Untuk membeli akses ke antarmuka yang dirujuk atau metode objek, mengembalikan pointer mentah yang mendasar. Anda tidak boleh memanggil AddRef atau Release pada penunjuk yang dikembalikan, tetapi Anda dapat memanggil QueryInterface.
Sintaksis
auto operator->() const noexcept;
Mengembalikan nilai
Penunjuk ke antarmuka atau objek yang direferensikan oleh objek com_ptr .
fungsi attach_abi
Melampirkan objek com_ptr ke penunjuk mentah yang memiliki referensi ke targetnya; referensi tambahan tidak ditambahkan. Jika diperlukan, Anda dapat menggunakan fungsi ini untuk menyaring referensi.
Sintaksis
void attach_abi(winrt::com_ptr<T>& object, T* value) noexcept;
Parameter
object Objek com_ptr untuk dioperasikan.
value Penunjuk mentah yang memiliki referensi ke targetnya.
fungsi detach_abi
Melepaskan objek com_ptr dari antarmuka mentahnya tanpa mengurangi jumlah referensi, mungkin untuk mengembalikannya ke penelepon.
Sintaksis
auto detach_abi(winrt::com_ptr<T>& object) noexcept;
Parameter
object Objek com_ptr untuk dioperasikan.
Mengembalikan nilai
Penunjuk ke antarmuka mentah yang direferensikan oleh objek com_ptr .
operator!= (operator ketidaksamaan)
Mengembalikan nilai yang menunjukkan apakah kedua parameter merujuk ke target yang berbeda.
Sintaksis
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;
Parameter
left
right Nilai com_ptr yang alamat memori targetnya untuk dibandingkan dengan parameter lainnya.
Mengembalikan nilai
true jika kedua parameter menunjuk ke target yang berbeda, jika tidak false.
operator< (operator kurang dari)
Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi lebih awal dalam memori daripada parameter kedua.
Sintaksis
template <typename T> bool operator<(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parameter
left
right Nilai com_ptr yang alamat memori targetnya untuk dibandingkan dengan parameter lainnya.
Mengembalikan nilai
true Jika alamat memori target parameter pertama kurang dari parameter kedua, jika tidak false.
operator<= (kurang dari-atau-sama dengan)
Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi lebih awal dalam memori daripada, atau di lokasi yang sama dengan, parameter kedua.
Sintaksis
template <typename T> bool operator<=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parameter
left
right Nilai com_ptr yang alamat memori targetnya untuk dibandingkan dengan parameter lainnya.
Mengembalikan nilai
true Jika alamat memori target parameter pertama kurang dari atau sama dengan parameter kedua, jika tidak false.
operator== (operator kesetaraan)
Mengembalikan nilai yang menunjukkan apakah kedua parameter merujuk ke antarmuka dan/atau objek yang sama.
Sintaksis
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;
Parameter
left
right Nilai com_ptr yang alamat memori targetnya untuk dibandingkan dengan parameter lainnya.
Mengembalikan nilai
true Jika kedua parameter menunjuk ke target yang sama, jika tidak false.
operator> (operator yang lebih besar dari)
Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi nanti dalam memori daripada parameter kedua.
Sintaksis
template <typename T> bool operator>(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parameter
left
right Nilai com_ptr yang alamat memori targetnya untuk dibandingkan dengan parameter lainnya.
Mengembalikan nilai
true Jika alamat memori target parameter pertama lebih besar dari parameter kedua, jika tidak false.
operator>= (operator yang lebih besar dari-atau-sama dengan)
Mengembalikan nilai yang menunjukkan apakah target parameter pertama terjadi nanti dalam memori daripada, atau di lokasi yang sama dengan, parameter kedua.
Sintaksis
template <typename T> bool operator>=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
Parameter
left
right Nilai com_ptr yang alamat memori targetnya untuk dibandingkan dengan parameter lainnya.
Mengembalikan nilai
true Jika alamat memori target parameter pertama lebih besar dari atau sama dengan parameter kedua, jika tidak false.
fungsi pertukaran
Menukar isi dari dua parameter com_ptr sehingga saling mengarah ke target satu sama lain.
Sintaksis
void swap(winrt::com_ptr& left, winrt::com_ptr& right) noexcept;
Parameter
left
right Nilai com_ptr yang penunjuknya saling bertukar dengan parameter lain.