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 |
Melepaskan objek com_array dari nilai mentahnya, mungkin untuk mengembalikannya ke pemanggil. com_array dibersihkan. Lihat juga fungsi winrt::d etach_abi. |
fungsi |
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
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.
Komentar
Konstruktor diberi nomor dalam Sintaks di atas.
1. Konstruktor default
Membuat buffer kosong.
2. Konstruktor kapasitas; nilai default
Membuat buffer elemen jumlah
Ini mirip dengan (tetapi tidak sama dengan) membuat buffer elemen jumlah
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
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
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