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 N
uint32_t N
Jumlah nilai (elemen) dalam data input.
Parameter
arrayValue
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 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
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk