winrt::com_array, modèle de struct (C++/WinRT)

Représente un tableau de données conforme au style C où la mémoire tampon sous-jacente est allouée et libérée via l’allocateur de tâche COM, d’où le nom. Il est généralement utilisé pour représenter un tableau conforme au style C alloué par un composant et libéré par un autre.

winrt::com_array est utilisé pour transmettre des paramètres vers et depuis Windows Runtime API. Si vous créez des API, vous devrez probablement construire un winrt::com_array pour retourner un tableau projeté à l’appelant ; soit comme valeur de retour, soit par le biais d’un paramètre de sortie.

winrt::com_array dérive de winrt::array_view. Consultez la rubrique de modèle de struct winrt::array_view , qui documente les membres et les opérateurs gratuits qui sont également disponibles pour winrt::com_array. Toutefois, tenez compte de la différence de sémantique entre le type de base winrt::array_view (qui est une vue non propriétaire, ou étendue, d’une série de valeurs contiguë) et winrt::com_array (qui alloue et libère ses propres éléments).

Syntax

template <typename T>
struct com_array : winrt::array_view<T>

Paramètres de modèle

typename T Type des valeurs (éléments) que contient le com_array .

Spécifications

Sdk minimum pris en charge : Windows SDK version 10.0.17134.0 (Windows 10, version 1803)

Espace de noms : winrt

En-tête : %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (inclus par défaut)

Constructeurs

Constructeur Description
constructeur com_array::com_array Initialise une nouvelle instance du struct com_array avec une copie des données d’entrée ou avec des valeurs par défaut si T aucune donnée n’est fournie.

Fonctions Membre

Fonction Description
fonction com_array::clear Rend l’objet com_array vide.

Opérateurs membres

Opérateur Description
com_array::operator= (opérateur d’assignation) Affecte une valeur à l’objet com_array .

Fonctions gratuites

Fonction Description
detach_abi, fonction Détache l’objet com_array de ses valeurs brutes, peut-être pour les retourner à un appelant. Le com_array est effacé. Consultez également la fonction winrt::d etach_abi.
fonction put_abi Récupère l’adresse du com_array afin qu’elle puisse être définie sur une autre valeur. Consultez également la fonction winrt::p ut_abi.
swap, fonction Échange le contenu des deux paramètres com_array .

constructeur com_array::com_array

Initialise une nouvelle instance du struct com_array avec une copie des données d’entrée ou avec des valeurs par défaut si T aucune donnée n’est fournie.

Syntax

Les constructeurs sont numérotés et décrits plus loin dans les remarques ci-dessous.

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;

Paramètres de modèle

typename InIt Itérateur d’entrée, qui fournit les données d’entrée.

size_t Nuint32_t N Nombre de valeurs (éléments) dans les données d’entrée.

Paramètres

arrayValue Valeur std::array qui initialise l’objet com_array .

comArrayValue Une autre com_array qui initialise l’objet com_array . Une fois le constructeur retourné, comArrayValue est vide.

count Nombre d’éléments de l’objet com_array .

firstlast Paire d’itérateurs d’entrée. Les valeurs de la plage [première, dernière) sont utilisées pour initialiser l’objet com_array .

initializerListValue Valeur de liste d’initialiseurs qui initialise l’objet com_array .

ptr Pointeur vers un bloc de valeurs N que vous avez allouées à l’aide de CoTaskMemAlloc. L’objet com_array prend possession de cette mémoire.

rawArrayValue Tableau de style C qui initialise l’objet com_array .

value Valeur à donner à chaque élément de l’objet com_array .

vectorValue Valeur std::vector qui initialise l’objet com_array .

Remarques

Les constructeurs sont numérotés dans la syntaxe ci-dessus.

1. Constructeur par défaut

Construit une mémoire tampon vide.

2. Constructeur de capacité ; valeur par défaut

Crée une mémoire tampon d’éléments de comptage , qui sont toutes des copies d’un T construit par défaut.

Cela est similaire à (mais pas identique à) à la création d’une mémoire tampon d’éléments de comptage , chacun d’eux étant un T construit par défaut.

auto players{ winrt::com_array<MediaPlayer>(50) };

Le constructeur par défaut de l’objet MediaPlayer crée une référence à un nouvel objet lecteur multimédia, et son constructeur de copie copie la référence. Par conséquent, la ligne de code ci-dessus crée un tableau de 50 références au même objet de lecteur multimédia. Il ne crée pas un tableau de 50 objets de lecteur multimédia différents.

3. Constructeur de capacité ; valeur explicite

Crée une mémoire tampon d’éléments de comptage , chacune étant une copie de la valeur fournie.

winrt::com_array(2, 42) est interprété comme une tentative d’utilisation du constructeur de plage (4). Mais elle échoue parce que 2 et 42 ne sont pas des itérateurs. Pour que cela soit interprété comme un constructeur de capacité avec une valeur de int32_t explicite, utilisez un entier explicitement non signé comme premier paramètre : com_array(2u, 42)

4. Constructeur de plage

Crée une mémoire tampon qui est une copie de la plage [première, dernière).

État explicite du type sous-jacent T , comme celui-ci.

auto a{ winrt::com_array<T>(source.begin(), source.end()) };

Pour déplacer la plage, au lieu de la copier, utilisez l’adaptateur d’itérateur std::move_iterator .

auto a{ winrt::com_array<T>(std::move_iterator(source.begin()),
                            std::move_iterator(source.end())) };

5. Constructeur vectoriel

Crée une mémoire tampon qui est une copie du contenu de vectorValue.

6. Constructeur de tableau

Crée une mémoire tampon qui est une copie du contenu de arrayValue.

7. Constructeur de tableau de style C

Crée une mémoire tampon qui est une copie du contenu du tableau de style C rawArrayValue.

8. Constructeur initialiseur-list

Crée une mémoire tampon qui est une copie du contenu de la liste d’initialiseurs initialiseur InitializerListValue.

9. Constructeur ABI

Prend possession d’une mémoire tampon de longueur spécifiée.

Ce niveau le plus bas des constructeurs. Utilisez-le lorsque vous disposez d’un bloc de mémoire déjà alloué via CoTaskMemAlloc, et que vous souhaitez que le com_array assume sa responsabilité. Pour souligner les exigences spéciales pour ce constructeur, l’argument final doit être winrt::take_ownership_from_abi.

10. Déplacer le constructeur

Déplace les ressources d’une autre com_array du même type, en laissant l’original vide.

Constructeurs 5, 6 et 7

Les copies sont prises du contenu du conteneur fourni. Vous pouvez utiliser le constructeur de plage (4) avec l’adaptateur d’itérateur std::move_iterator pour déplacer le contenu dans le com_array au lieu de les copier.

fonction com_array::clear

Rend l’objet com_array vide.

Syntax

void clear() noexcept;

detach_abi, fonction

Détache l’objet com_array de ses valeurs brutes, peut-être pour les retourner à un appelant. Le com_array est effacé. Consultez également la fonction winrt::d etach_abi.

Syntaxe

auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;

Paramètres

object Objet com_array à utiliser.

Valeur retournée

Tuple à deux éléments contenant un nombre d’éléments et la série contiguë de valeurs que l’com_array s’étend.

com_array::operator= (opérateur d’assignation)

Affecte une valeur à l’objet com_array .

Syntaxe

com_array& operator=(winrt::com_array&& comArrayValue) noexcept;

Paramètres

comArrayValue Valeur com_array à affecter à l’objet com_array .

Valeur retournée

Référence à l’objet com_array .

fonction put_abi

Récupère l’adresse du com_array afin qu’elle puisse être définie sur une autre valeur. Consultez également la fonction winrt::p ut_abi.

Syntaxe

template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;

Paramètres

object Objet com_array à utiliser.

Valeur retournée

Adresse du com_array, prête à être définie sur une autre valeur.

swap, fonction

Échange le contenu des deux paramètres com_array .

Syntaxe

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

Paramètres

leftright Valeur com_array dont le contenu doit s’échanger mutuellement avec ceux de l’autre paramètre.

Exemple

using namespace winrt;
...
    com_array<byte> left{ 1,2,3 };
    com_array<byte> right{ 4,5,6 };
    swap(left, right);

Voir aussi