Modello di struct winrt::com_array (C++/WinRT)
Rappresenta una matrice di dati conforme allo stile C in cui il buffer sottostante viene allocato e liberato tramite l'allocatore di attività COM, di conseguenza il nome. Viene in genere usato per rappresentare una matrice conforme allo stile C allocata da un componente e liberata da un altro.
winrt::com_array viene usato per passare parametri da e verso le API di Windows Runtime. Se stai creando API, probabilmente dovrai costruire un winrt::com_array per restituire una matrice proiettata al chiamante; come valore restituito o tramite un parametro di output.
winrt::com_array deriva da winrt::array_view. Vedere l'argomento modello di struct winrt::array_view, che illustra i membri e gli operatori gratuiti disponibili anche per winrt::com_array. Tuttavia, tenere presente la differenza nella semantica tra il tipo di base winrt::array_view (che è una visualizzazione non proprietaria, o span, di una serie contigua di valori) e winrt::com_array (che alloca e libera i propri elementi).
Sintassi
template <typename T>
struct com_array : winrt::array_view<T>
Parametri del modello
typename T
Tipo dei valori (elementi) contenuti nel com_array.
Fabbisogno
SDK minimo supportato: Windows SDK versione 10.0.17134.0 (Windows 10, versione 1803)
Namespace: winrt
intestazione : %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (incluso per impostazione predefinita)
Costruttori
Costruttore | Descrizione |
---|---|
del costruttore |
Inizializza una nuova istanza dello struct com_array con una copia dei dati di input o con i valori predefiniti di T se non vengono forniti dati. |
Funzioni membro
Funzione | Descrizione |
---|---|
funzione com_array::clear | Rende vuoto l'oggetto com_array. |
Operatori membro
Operatore | Descrizione |
---|---|
|
Assegna un valore all'oggetto com_array. |
Funzioni gratuite
Funzione | Descrizione |
---|---|
detach_abi funzione | Scollega l'oggetto com_array dai valori non elaborati, ad esempio per restituirli a un chiamante. Il com_array viene cancellato. Vedere anche funzione winrt::d etach_abi. |
put_abi funzione | Recupera l'indirizzo del com_array in modo che possa essere impostato su un altro valore. Vedere anche funzione winrt::p ut_abi. |
funzione swap | Scambia il contenuto dei due parametri com_array. |
Costruttore com_array::com_array
Inizializza una nuova istanza dello struct com_array con una copia dei dati di input o con i valori predefiniti di T
se non vengono forniti dati.
Sintassi
I costruttori sono numerati e descritti più avanti in osservazioni di seguito.
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;
Parametri del modello
typename InIt
Iteratore di input, che fornisce i dati di input.
size_t N
uint32_t N
Numero di valori (elementi) nei dati di input.
Parametri
comArrayValue
Un altro com_array che inizializza l'oggetto com_array. Al termine del costruttore, comArrayValue sarà vuoto.
count
Conteggio degli elementi dell'oggetto com_array.
first
last
Coppia di iteratori di input. I valori nell'intervallo [prima, ultimo) vengono usati per inizializzare l'oggetto com_array.
initializerListValue
Valore dell'elenco di inizializzatori che inizializza l'oggetto com_array.
ptr
Puntatore a un blocco di N valori allocati usando CoTaskMemAlloc. L'oggetto com_array acquisisce la proprietà di questa memoria.
rawArrayValue
Matrice di tipo C che inizializza l'oggetto com_array.
value
Valore da assegnare a ogni elemento dell'oggetto com_array.
Osservazioni
I costruttori sono numerati in sintassi precedente.
1. Costruttore predefinito
Costruisce un buffer vuoto.
2. Costruttore di capacità; valore predefinito
Crea un buffer di conteggio elementi, tutti copie di un T predefinito.
Questo comportamento è simile a (ma non uguale) alla creazione di un buffer di conteggio elementi, ognuno dei quali è un T predefinito.
auto players{ winrt::com_array<MediaPlayer>(50) };
Il costruttore predefinito dell'oggetto MediaPlayer crea un riferimento a un nuovo oggetto lettore multimediale e il relativo costruttore di copia copia il riferimento. Pertanto, la riga di codice precedente crea una matrice di 50 riferimenti allo stesso oggetto lettore multimediale. Non crea una matrice di 50 oggetti lettore multimediali diversi.
3. Costruttore di capacità; valore esplicito
Crea un buffer di conteggio elementi, ognuno dei quali è una copia del valore specificato.
winrt::com_array(2, 42)
viene interpretato come un tentativo di usare il costruttore di intervallo (4). Ma non riesce perché 2 e 42 non sono iteratori. Per ottenere questo valore da interpretare come costruttore di capacità con un valore int32_t esplicito, usare un intero senza segno in modo esplicito come primo parametro: com_array(2u, 42)
.
4. Costruttore di intervallo
Crea un buffer che è una copia dell'intervallo [prima, ultimo).
Indicare in modo esplicito il tipo sottostante T.
auto a{ winrt::com_array<T>(source.begin(), source.end()) };
Per spostare l'intervallo, anziché copiarlo, usare l'adattatore dell'iteratore std::move_iterator
auto a{ winrt::com_array<T>(std::move_iterator(source.begin()),
std::move_iterator(source.end())) };
5. Costruttore vector
Crea un buffer che rappresenta una copia del contenuto di vectorValue.
6. Costruttore array
Crea un buffer che rappresenta una copia del contenuto di arrayValue.
7. Costruttore di matrice in stile C
Crea un buffer che rappresenta una copia del contenuto della matrice in stile C rawArrayValue.
8. Costruttore Initializer-list
Crea un buffer che rappresenta una copia del contenuto dell'elenco di inizializzatori initializerListValue.
9. Costruttore ABI
Acquisisce la proprietà di un buffer di lunghezza specificata.
Questo livello più basso dei costruttori. Usarlo quando si dispone di un blocco di memoria già allocato tramite CoTaskMemAlloce si vuole che il com_array assuma la responsabilità. Per evidenziare i requisiti speciali per questo costruttore, l'argomento finale deve essere winrt::take_ownership_from_abi.
10. Costruttore move
Sposta le risorse da un altro com_array dello stesso tipo, lasciando vuoto l'originale.
Costruttori 5, 6 e 7
Le copie vengono eseguite del contenuto del contenitore fornito. È possibile usare il costruttore di intervallo (4) con l'adattatore std::move_iterator iteratore per spostare il contenuto nella com_array anziché copiarli.
funzione com_array::clear
Rende vuoto l'oggetto com_array.
Sintassi
void clear() noexcept;
funzione detach_abi
Scollega l'oggetto com_array dai valori non elaborati, ad esempio per restituirli a un chiamante. Il com_array viene cancellato. Vedere anche funzione winrt::d etach_abi.
Sintassi
auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;
Parametri
object
Oggetto com_array su cui operare.
Valore restituito
Tupla a due elementi contenente un conteggio degli elementi e la serie contigua di valori che l'com_array ha esteso.
com_array::operator= (operatore di assegnazione)
Assegna un valore all'oggetto com_array.
Sintassi
com_array& operator=(winrt::com_array&& comArrayValue) noexcept;
Parametri
comArrayValue
Valore com_array da assegnare all'oggetto com_array.
Valore restituito
Riferimento all'oggetto com_array.
funzione put_abi
Recupera l'indirizzo del com_array in modo che possa essere impostato su un altro valore. Vedere anche funzione winrt::p ut_abi.
Sintassi
template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;
Parametri
object
Oggetto com_array su cui operare.
Valore restituito
Indirizzo del com_array, pronto per essere impostato su un altro valore.
funzione swap
Scambia il contenuto dei due parametri com_array.
Sintassi
friend void swap(winrt::com_array& left, winrt::com_array& right) noexcept;
Parametri
left
right
Valore com_array il cui contenuto viene scambiato a vicenda con quelli dell'altro parametro.
Esempio
using namespace winrt;
...
com_array<byte> left{ 1,2,3 };
com_array<byte> right{ 4,5,6 };
swap(left, right);