Condividi tramite


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

Funzioni membro

Funzione Descrizione
funzione com_array::clear Rende vuoto l'oggetto com_array.

Operatori membro

Operatore Descrizione
com_array::operator= (operatore di assegnazione) 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

Valore di std::array che inizializza l'oggetto com_array.

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.

Valore di std::vector che inizializza l'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);

Vedere anche