modèle de struct winrt ::com_array (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, par conséquent le nom. Il est généralement utilisé pour représenter un tableau conforme au style C qui est alloué par un composant et libéré par un autre.
winrt ::com_array est utilisé pour passer des paramètres à et depuis des API Windows Runtime. 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 via 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 libres qui sont également disponibles pour winrt ::com_array. Toutefois, tenez compte de la différence entre la 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).
template <typename T>
struct com_array : winrt::array_view<T>
typename T
Type des valeurs (éléments) que contient le com_array.
Kit de développement logiciel (SDK) minimum pris en charge : SDK Windows version 10.0.17134.0 (Windows 10, version 1803)
Namespace : winrt
en-tête : %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (inclus par défaut)
Constructeur | Description |
---|---|
com_array ::com_array constructeur | Initialise une nouvelle instance du struct com_array avec une copie des données d’entrée ou avec des valeurs par défaut de T si aucune donnée n’est fournie. |
Fonction | Description |
---|---|
de fonction |
Rend l’objet com_array vide. |
Opérateur | Description |
---|---|
|
Affecte une valeur à l’objet com_array. |
Fonction | Description |
---|---|
detach_abi fonction | Détache l’objet com_array de ses valeurs brutes, peut-être pour les renvoyer à un appelant. La com_array est effacée. Consultez également fonction winrt ::d etach_abi. |
put_abi fonction | Récupère l’adresse du com_array afin qu’elle puisse être définie sur une autre valeur. Consultez également fonction winrt ::p ut_abi. |
fonction d’échange | Échange le contenu des deux paramètres 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 de T
si aucune donnée n’est fournie.
Les constructeurs sont numérotés et décrits plus loin dans 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;
typename InIt
Itérateur d’entrée, qui fournit les données d’entrée.
size_t N
uint32_t N
Nombre de valeurs (éléments) dans les données d’entrée.
comArrayValue
un autre com_array qui initialise l’objet com_array. Une fois le constructeur retourné, comArrayValue sera vide.
count
Nombre d’éléments de l’objet com_array.
first
last
paire d’itérateurs d’entrée. Les valeurs de la plage [premier, 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.
Les constructeurs sont numérotés dans syntaxe ci-dessus.
Construit une mémoire tampon vide.
Crée une mémoire tampon de nombre d’éléments, qui sont toutes des copies d’une Tconstruite par défaut.
Ceci est similaire à (mais pas identique à) la création d’une mémoire tampon de nombre d’éléments, chacun é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.
Crée une mémoire tampon de nombre d’éléments, dont chacune est une copie de la valeur fournie.
winrt::com_array(2, 42)
est interprétée comme une tentative d’utilisation du constructeur de plage (4). Mais il échoue parce que 2 et 42 ne sont pas 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)
.
Crée une mémoire tampon qui est une copie de la plage [premier, dernière).
Indiquez le type sous-jacent T explicitement, comme ceci.
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())) };
Crée une mémoire tampon qui est une copie du contenu de vectorValue.
Crée une mémoire tampon qui est une copie du contenu de arrayValue.
Crée une mémoire tampon qui est une copie du contenu du tableau de style C rawArrayValue.
Crée une mémoire tampon qui est une copie du contenu de la liste d’initialiseurs initializerListValue.
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 particulières de ce constructeur, l’argument final doit être winrt ::take_ownership_from_abi.
Déplace les ressources d’une autre com_array du même type, en laissant l’original vide.
Les copies sont extraites du contenu du conteneur fourni. Vous pouvez utiliser le constructeur de plage (4) avec le std ::move_iterator adaptateur d’itérateur pour déplacer le contenu dans le com_array au lieu de les copier.
Rend l’objet com_array vide.
void clear() noexcept;
Détache l’objet com_array de ses valeurs brutes, peut-être pour les renvoyer à un appelant. La com_array est effacée. Consultez également fonction winrt ::d etach_abi.
auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;
object
objet com_array sur lequel opérer.
Tuple à deux éléments contenant un nombre d’éléments et la série contiguë de valeurs que le com_array s’étendait.
Affecte une valeur à l’objet com_array.
com_array& operator=(winrt::com_array&& comArrayValue) noexcept;
comArrayValue
valeur de com_array à affecter à l’objet com_array.
Référence à l’objet com_array.
Récupère l’adresse du com_array afin qu’elle puisse être définie sur une autre valeur. Consultez également fonction winrt ::p ut_abi.
template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;
object
objet com_array sur lequel opérer.
Adresse du com_array, prête à être définie sur une autre valeur.
Échange le contenu des deux paramètres com_array.
friend void swap(winrt::com_array& left, winrt::com_array& right) noexcept;
left
right
Valeur com_array dont le contenu doit s’échanger mutuellement avec ceux de l’autre paramètre.
using namespace winrt;
...
com_array<byte> left{ 1,2,3 };
com_array<byte> right{ 4,5,6 };
swap(left, right);