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.

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:

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.

Lihat juga