Bagikan melalui


winrt::com_array templat struct (C++/WinRT)

Mewakili array data sesuai gaya C di mana buffer yang mendasar dialokasikan dan dibebaskan melalui alokator tugas COM, karenanya namanya. Biasanya digunakan untuk mewakili array konforman gaya C yang dialokasikan oleh satu komponen, dan dibebesarkan oleh komponen lain.

winrt::com_array digunakan untuk meneruskan parameter ke dan dari WINDOWS Runtime API. Jika Anda menulis API maka Anda mungkin perlu membuat winrt::com_array untuk mengembalikan array yang diproyeksikan ke pemanggil; baik sebagai nilai pengembalian, atau melalui parameter output.

winrt::com_array berasal dari winrt::array_view. Lihat topik templat struct winrt::array_view, yang menandakan anggota dan operator gratis yang juga tersedia untuk winrt::com_array. Namun, perhatikan perbedaan semantik antara jenis dasar winrt::array_view (yang merupakan tampilan non-pemilik, atau rentang, dari serangkaian nilai yang berdampingan), dan winrt::com_array (yang mengalokasikan dan membebaskan elemennya sendiri).

Sintaksis

template <typename T>
struct com_array : winrt::array_view<T>

Parameter templat

typename T Jenis nilai (elemen) yang dikandung com_array.

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)

Konstruktor

Pembangun Deskripsi
com_array::com_array konstruktor Menginisialisasi instans baru struct com_array dengan salinan data input, atau dengan nilai default T jika tidak ada data yang disediakan.

Fungsi anggota

Fungsi Deskripsi
com_array::clear function Membuat objek com_array kosong.

Operator anggota

Operator Deskripsi
com_array::operator= (operator penugasan) Menetapkan nilai ke objek com_array.

Fungsi gratis

Fungsi Deskripsi
fungsi detach_abi Melepaskan objek com_array dari nilai mentahnya, mungkin untuk mengembalikannya ke pemanggil. com_array dibersihkan. Lihat juga fungsi winrt::d etach_abi.
fungsi put_abi Mengambil alamat com_array sehingga dapat diatur ke nilai lain. Lihat juga fungsi winrt::p ut_abi.
fungsi pertukaran Menukar konten dua parameter com_array.

konstruktor com_array::com_array

Menginisialisasi instans baru struct com_array dengan salinan data input, atau dengan nilai default T jika tidak ada data yang disediakan.

Sintaksis

Konstruktor diberi nomor, dan dijelaskan lebih lanjut dalam Remarks di bawah ini.

1.  com_array() noexcept;
2.  com_array(uint32_t const count);
3.  com_array(uint32_t const count, T const& value);
4.  template <typename InIt> com_array(InIt first, InIt last);
5.  com_array(std::vector<T> const& vectorValue);
6.  template <size_t N> com_array(std::array<T, N> const& arrayValue);
7.  template <uint32_t N> com_array(T const(&rawArrayValue)[N])
8.  com_array(std::initializer_list<T> initializerListValue);
9.  com_array(void* ptr, uint32_t const count, winrt::take_ownership_from_abi_t) noexcept;
10. com_array(com_array&& comArrayValue) noexcept;

Parameter templat

typename InIt Iterator input, yang menyediakan data input.

size_t N uint32_t N Jumlah nilai (elemen) dalam data input.

Parameter

nilai std::array yang menginisialisasi objek com_array.

comArrayValue com_array lain yang menginisialisasi objek com_array. Setelah konstruktor kembali, comArrayValue akan kosong.

count Jumlah elemen objek com_array.

first last Sepasang iterator input. Nilai dalam rentang [pertama , terakhir ) digunakan untuk menginisialisasi objek com_array.

initializerListValue Nilai daftar inisialisasi yang menginisialisasi objek com_array.

ptr Pointer ke blok nilai N, yang telah Anda alokasikan dengan menggunakan CoTaskMemAlloc. Objek com_array mengambil kepemilikan memori ini.

rawArrayValue array gaya C yang menginisialisasi objek com_array.

value Nilai yang akan diberikan ke setiap elemen objek com_array.

nilai std::vektor yang menginisialisasi objek com_array.

Komentar

Konstruktor diberi nomor dalam Sintaks di atas.

1. Konstruktor default

Membuat buffer kosong.

2. Konstruktor kapasitas; nilai default

Membuat buffer elemen jumlah , yang semuanya merupakan salinan Tyang dibuat secara default.

Ini mirip dengan (tetapi tidak sama dengan) membuat buffer elemen jumlah , yang masing-masing adalah T yang dibangun secara default.

auto players{ winrt::com_array<MediaPlayer>(50) };

Konstruktor default objek MediaPlayer membuat referensi ke objek pemutar media baru, dan konstruktor salinannya menyalin referensi. Oleh karena itu, baris kode di atas membuat array 50 referensi ke objek pemutar media yang sama. Ini tidak membuat array 50 objek pemutar media yang berbeda.

3. Konstruktor kapasitas; nilai eksplisit

Membuat buffer elemen jumlah , yang masing-masing adalah salinan nilai yang disediakan.

winrt::com_array(2, 42) ditafsirkan sebagai upaya untuk menggunakan konstruktor rentang (4). Tetapi gagal karena 2 dan 42 bukan iterator. Untuk mendapatkan ini ditafsirkan sebagai konstruktor kapasitas dengan nilai int32_t eksplisit, gunakan bilangan bulat yang tidak ditandatangani secara eksplisit sebagai parameter pertama: com_array(2u, 42).

4. Konstruktor rentang

Membuat buffer yang merupakan salinan rentang [pertama , terakhir ).

Sebarkan jenis yang mendasar T secara eksplisit, seperti ini.

auto a{ winrt::com_array<T>(source.begin(), source.end()) };

Untuk memindahkan rentang, daripada menyalinnya, gunakan adaptor iterator std::move_iterator.

auto a{ winrt::com_array<T>(std::move_iterator(source.begin()),
                            std::move_iterator(source.end())) };

5. Konstruktor vektor

Membuat buffer yang merupakan salinan konten vectorValue.

6. Konstruktor array

Membuat buffer yang merupakan salinan konten array Value.

7. Konstruktor array gaya C

Membuat buffer yang merupakan salinan konten array gaya C rawArrayValue.

8. Konstruktor daftar inisialisasi

Membuat buffer yang merupakan salinan konten daftar inisialisasi initializerListValue.

9. Konstruktor ABI

Mengambil kepemilikan buffer dengan panjang yang ditentukan.

Tingkat terendah konstruktor ini. Gunakan saat Anda memiliki blok memori yang sudah dialokasikan melalui CoTaskMemAlloc, dan Anda ingin com_array bertanggung jawab atas hal tersebut. Untuk menekankan persyaratan khusus untuk konstruktor ini, argumen akhir harus winrt::take_ownership_from_abi.

10. Pindahkan konstruktor

Memindahkan sumber daya dari com_array lain dengan jenis yang sama, membiarkan sumber daya asli kosong.

Konstruktor 5, 6, dan 7

Salinan diambil dari konten kontainer yang disediakan. Anda dapat menggunakan konstruktor rentang (4) dengan adaptor iterator std::move_iterator untuk memindahkan konten ke com_array alih-alih menyalinnya.

com_array::clear function

Membuat objek com_array kosong.

Sintaksis

void clear() noexcept;

fungsi detach_abi

Melepaskan objek com_array dari nilai mentahnya, mungkin untuk mengembalikannya ke pemanggil. com_array dibersihkan. Lihat juga fungsi winrt::d etach_abi.

Sintaksis

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

Parameter

object Objek com_array untuk dioperasikan.

Mengembalikan nilai

Tuple dua elemen yang berisi jumlah elemen, dan rangkaian nilai yang berdekatan yang com_array terbentang.

com_array::operator= (operator penugasan)

Menetapkan nilai ke objek com_array.

Sintaksis

com_array& operator=(winrt::com_array&& comArrayValue) noexcept;

Parameter

comArrayValue Nilai com_array untuk ditetapkan ke objek com_array.

Mengembalikan nilai

Referensi ke objek com_array.

fungsi put_abi

Mengambil alamat com_array sehingga dapat diatur ke nilai lain. Lihat juga fungsi winrt::p ut_abi.

Sintaksis

template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;

Parameter

object Objek com_array untuk dioperasikan.

Mengembalikan nilai

Alamat com_array, siap diatur ke nilai lain.

fungsi pertukaran

Menukar konten dua parameter com_array.

Sintaksis

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

Parameter

left right Nilai com_array yang kontennya saling bertukar dengan nilai parameter lainnya.

Contoh

using namespace winrt;
...
    com_array<byte> left{ 1,2,3 };
    com_array<byte> right{ 4,5,6 };
    swap(left, right);

Lihat juga

  • namespace winrt