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

Mewakili array data yang sesuai dengan gaya C di mana buffer yang mendasar dialokasikan dan dibebaskan melalui alokator tugas COM, oleh karena itu namanya. Biasanya digunakan untuk mewakili array sesuai gaya C yang dialokasikan oleh satu komponen, dan dibebaskan 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 yang dikembalikan, atau melalui parameter output.

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

Sintaks

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

Konstruktor Deskripsi
konstruktor com_array::com_array Menginisialisasi instans baru struct com_array dengan salinan data input, atau dengan nilai T default 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
detach_abi (Fungsi detach_abi) Melepaskan objek com_array dari nilai mentahnya, mungkin untuk mengembalikannya ke penelepon. Com_array sudah dibersihkan. Lihat juga fungsi winrt::d etach_abi.
put_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 T default jika tidak ada data yang disediakan.

Sintaks

Konstruktor diberi nomor, dan dijelaskan lebih lanjut dalam Keterangan 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 Nuint32_t N Jumlah nilai (elemen) dalam data input.

Parameter

arrayValue Nilai std::array yang menginisialisasi objek com_array .

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

count Jumlah elemen objek com_array .

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

initializerListValue Nilai daftar penginisialisasi yang menginisialisasi objek com_array .

ptr Penunjuk 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 .

vectorValue Nilai std::vector yang menginisialisasi objek com_array .

Keterangan

Konstruktor diberi nomor dalam Sintaks di atas.

1. Konstruktor default

Membuat buffer kosong.

2. Konstruktor kapasitas; nilai default

Membuat buffer elemen hitungan , yang semuanya merupakan salinan T yang dibangun secara default.

Ini mirip dengan (tetapi tidak sama dengan) membuat buffer elemen hitungan , 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 hitungan , yang masing-masing merupakan salinan dari 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 arrayValue.

7. Konstruktor array gaya C

Membuat buffer yang merupakan salinan konten array gaya C rawArrayValue.

8. Konstruktor initializer-list

Membuat buffer yang merupakan salinan konten daftar initializer initializerListValue.

9. Konstruktor ABI

Mengambil kepemilikan buffer dengan panjang yang ditentukan.

Konstruktor tingkat terendah ini. Gunakan ketika Anda memiliki blok memori yang sudah dialokasikan melalui CoTaskMemAlloc, dan Anda ingin com_array bertanggung jawab atas hal itu. 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.

Sintaks

void clear() noexcept;

detach_abi (Fungsi detach_abi)

Mencopot objek com_array dari nilai mentahnya, mungkin untuk mengembalikannya ke penelepon. Com_array sudah dibersihkan. Lihat juga fungsi winrt::d etach_abi.

Sintaks

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 membentang.

com_array::operator= (operator penugasan)

Menetapkan nilai ke objek com_array .

Sintaks

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.

Sintaks

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 .

Sintaks

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

Parameter

leftright 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