winrt::mengimplementasikan templat struct (C++/WinRT)
Ini adalah dasar dari mana implementasi C++/WinRT Anda sendiri (kelas runtime dan pabrik aktivasi) secara langsung atau tidak langsung berasal. Ini mengimplementasikan satu atau beberapa antarmuka Windows Runtime (yang Anda tentukan sebagai parameter jenis), dan juga menyediakan implementasi IUnknown, IInspectable, IAgileObject, IWeakReferenceSource yang efisien, dan lainnya.
Catatan
Untuk informasi selengkapnya tentang berasal dari jenis ini, dan contohnya, lihat API Pembuat dengan C++/WinRT.
Titik ekstensi pada winrt::implements
winrt::implements memiliki titik ekstensi yang memungkinkan Anda menangguhkan penghancuran jenis implementasi Anda, untuk mengkueri dengan aman selama penghancuran, dan untuk menghubungkan entri ke dalam dan keluar dari metode yang Diproyeksikan. Berikut adalah nama-nama titik ekstensi, bersama dengan tautan ke contoh detail dan kode.
- final_release. Lihat Penghancuran yang ditangguhkan dan Kueri aman selama penghancuran.
- abi_enter, abi_exit, dan abi_guard. Lihat Entri metode dan keluar dari kait.
Jenis penanda
Templat struct implements mendukung beberapa jenis penanda yang digunakan untuk mengambil alih perilaku default. Kami berharap bahwa ini hanya akan jarang digunakan; default cukup untuk hampir semua kasus. Jenis penanda dapat muncul di mana saja dalam daftar antarmuka, yang merupakan paket parameter variadik.
Jenis penanda berikut didukung oleh implementasi:
- berjubah<I>
- dapat dikomposiskan
- Menulis
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (untuk pabrik)
Contoh pertama ini berlaku ketika Anda memperoleh langsung dari implementasi.
struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
...
}
Contoh berikutnya adalah ketika Anda menulis kelas runtime.
struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
...
}
Sintaks
template <typename D, typename... I>
struct implements
Parameter templat
typename D
Nama jenis turunan Anda.
typename... I
Sejumlah antarmuka yang akan diimplementasikan, ditambah jenis penanda yang diinginkan.
Secara default, antarmuka yang berasal dari IInspectable dilaporkan oleh implementasi metode IInspectable::GetIids . cloaked
Gunakan templat penanda untuk menekannya.
Contoh
// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
IFrameworkView CreateView()
{
return ...
}
}
...
Persyaratan
SDK minimum yang didukung: Windows SDK versi 10.0.17134.0 (Windows 10, versi 1803)
Namespace: winrt
Header: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (disertakan secara default)
Fungsi anggota
Fungsi | Deskripsi |
---|---|
mengimplementasikan::Fungsi AddRef | Menaikkan jumlah referensi untuk antarmuka default objek implementasi . |
fungsi implements::find_inspectable | TBD |
fungsi implements::find_interface | Penunjuk ke antarmuka yang diimplementasikan oleh objek implementasi , diidentifikasi oleh pengidentifikasi yang ditentukan; tidak memanggil AddRef. |
fungsi implements::get_local_iids | Mengambil tuple dua elemen yang berisi pengidentifikasi antarmuka yang diimplementasikan oleh objek implementasi . |
fungsi implements::get_strong | Mengambil referensi yang kuat ke objek implementasi penunjuk ini . |
fungsi implements::get_weak | Mengambil referensi lemah ke objek implementasi penunjuk ini . |
implements::QueryInterface function | Mengambil penunjuk ke antarmuka yang diimplementasikan oleh objek implementasi , yang diidentifikasi oleh pengidentifikasi yang ditentukan; memanggil AddRef. |
implements::Release function | Mengurangi jumlah referensi untuk antarmuka default objek implementasi . |
Operator anggota
Operator | Deskripsi |
---|---|
implements::operator Windows::Foundation::IInspectable | Mengonversi objek implement ke Windows::Foundation::IInspectable. |
Anggota data
Anggota data | Deskripsi |
---|---|
m_inner | Mengakses objek yang disusam , jika berlaku. Untuk informasi selengkapnya, lihat Turunan kelas runtime. |
mengimplementasikan::Fungsi AddRef
Menaikkan jumlah referensi untuk antarmuka default objek implementasi .
Sintaks
unsigned long __stdcall AddRef() noexcept;
Mengembalikan nilai
Jumlah referensi baru. Nilai ini dimaksudkan untuk digunakan hanya untuk tujuan pengujian.
fungsi implements::find_inspectable
Mengambil penunjuk ke antarmuka IInspectable yang diimplementasikan oleh objek implementasi . Tidak memanggil AddRef pada pointer yang dikembalikannya. Fungsi ini memungkinkan Anda untuk meneruskan objek implementasi ke fungsi yang mengharapkan IInspectable.
Sintaks
::IInspectable* find_inspectable() const noexcept override;
Mengembalikan nilai
Penunjuk ke antarmuka IInspectable yang diimplementasikan oleh objek implementasi .
fungsi implements::find_interface
Mengambil penunjuk ke antarmuka yang diimplementasikan oleh objek implement , yang diidentifikasi oleh pengidentifikasi yang ditentukan. Tidak memanggil AddRef pada pointer yang dikembalikannya.
Sintaks
void* find_interface(winrt::guid const& id) const noexcept override;
Mengembalikan nilai
Penunjuk ke antarmuka yang diimplementasikan oleh objek implementasi , yang diidentifikasi oleh pengidentifikasi yang ditentukan.
fungsi implements::get_local_iids
Mengambil tuple dua elemen yang berisi pengidentifikasi antarmuka yang diimplementasikan oleh objek implementasi . Antarmuka "Berjubah" tidak disertakan.
Sintaks
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
Mengembalikan nilai
Tuple dua elemen yang berisi jumlah dan pengidentifikasi antarmuka yang diimplementasikan oleh objek implementasi .
fungsi implements::get_strong
Mengambil referensi yang kuat ke objek winrt::implements pointer ini . Lihat Referensi yang kuat dan lemah di C++/WinRT. Karena get_strong adalah fungsi anggota dari templat struct winrt::implements , Anda dapat memanggilnya hanya dari objek yang secara langsung atau tidak langsung berasal dari winrt::implements, seperti objek C++/WinRT. Untuk informasi selengkapnya tentang berasal dari winrt::implements, dan contoh, lihat AUTHOR API dengan C++/WinRT.
Sintaks
protected:
winrt::com_ptr<D> get_strong() noexcept;
Mengembalikan nilai
Referensi yang kuat ke objek implementasi adalah penunjuk ini .
fungsi implements::get_weak
Mengambil referensi lemah ke objek winrt::implements pointer ini . Lihat Referensi yang kuat dan lemah di C++/WinRT. Karena get_weak adalah fungsi anggota dari templat struct winrt::implements , Anda dapat memanggilnya hanya dari objek yang secara langsung atau tidak langsung berasal dari winrt::implements, seperti objek C++/WinRT. Untuk informasi selengkapnya tentang berasal dari winrt::implements, dan contoh, lihat AUTHOR API dengan C++/WinRT.
Sintaks
protected:
winrt::weak_ref<D> get_weak() noexcept;
Mengembalikan nilai
Objek weak_ref yang mewakili referensi lemah ke objek implementasi penunjuk ini .
implements::QueryInterface function
Mengambil penunjuk ke antarmuka yang diimplementasikan oleh objek implement , yang diidentifikasi oleh pengidentifikasi yang ditentukan. Memanggil AddRef pada pointer yang dikembalikannya.
Sintaks
HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;
Mengembalikan nilai
Jumlah referensi baru. Nilai ini dimaksudkan untuk digunakan hanya untuk tujuan pengujian.
implements::Release function
Mengurangi jumlah referensi untuk antarmuka default objek implementasi .
Sintaks
unsigned long __stdcall Release() noexcept;
Mengembalikan nilai
Jumlah referensi baru. Nilai ini dimaksudkan untuk digunakan hanya untuk tujuan pengujian.
implements::operator Windows::Foundation::IInspectable
Mengonversi objek implement ke Windows::Foundation::IInspectable. Operator ini memungkinkan Anda untuk meneruskan objek implementasi ke fungsi yang mengharapkan IInspectable.
Sintaks
operator winrt::Windows::Foundation::IInspectable() const noexcept;
Mengembalikan nilai
Objek implementasi dikonversi ke Windows::Foundation::IInspectable.