Auf Englisch lesen

Freigeben über


winrt::com_array Strukturvorlage (C++/WinRT)

Stellt ein C-konformes Datenarray dar, bei dem der zugrunde liegende Puffer über den COM-Aufgabenverteiler zugewiesen und freigegeben wird, daher der Name. Es wird in der Regel verwendet, um ein C-konformes Array darzustellen, das von einer Komponente zugewiesen und von einer anderen freigegeben wird.

winrt::com_array wird zum Übergeben von Parametern an und von Windows-Runtime-APIs verwendet. Wenn Sie APIs erstellen, müssen Sie wahrscheinlich eine winrt::com_array erstellen, um ein projiziertes Array an den Aufrufer zurückzugeben; entweder als Rückgabewert oder über einen Ausgabeparameter.

winrt::com_array wird von winrt::array_viewabgeleitet. Weitere Informationen finden Sie im Thema winrt::array_view Strukturvorlage, in dem Mitglieder und kostenlose Operatoren dokumentiert werden, die auch für winrt::com_arrayverfügbar sind. Beachten Sie jedoch den Unterschied in der Semantik zwischen dem Basistyp winrt::array_view (eine nicht eigene Ansicht oder Spanne einer zusammenhängenden Wertereihe) und winrt::com_array (die eigene Elemente zuordnet und freigibt).

Syntax

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

Vorlagenparameter

typename T Der Typ der Werte (Elemente), die die com_array enthält.

Anforderungen

Mindestens unterstützte SDK: Windows SDK, Version 10.0.17134.0 (Windows 10, Version 1803)

Namespace: winrt

Header: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (standardmäßig enthalten)

Erbauer

Konstruktor Beschreibung
com_array::com_array-Konstruktor Initialisiert eine neue Instanz der com_array Struktur mit einer Kopie der Eingabedaten oder mit Standardwerten von T, wenn keine Daten bereitgestellt werden.

Memberfunktionen

Funktion Beschreibung
com_array::Clear-Funktion Macht das com_array -Objekt leer.

Memberoperatoren

Operator Beschreibung
com_array::operator= (Zuordnungsoperator) Weist dem com_array -Objekt einen Wert zu.

Kostenlose Funktionen

Funktion Beschreibung
detach_abi Funktion Trennt das com_array-Objekt von seinen Rohwerten, um sie möglicherweise an einen Aufrufer zurückzugeben. Die com_array wird gelöscht. Siehe auch winrt::d etach_abi function.
put_abi Funktion Ruft die Adresse des com_array ab, damit sie auf einen anderen Wert festgelegt werden kann. Siehe auch winrt::p ut_abi function.
Swap-Funktion Tauscht den Inhalt der beiden com_array Parameter aus.

com_array::com_array-Konstruktor

Initialisiert eine neue Instanz der com_array Struktur mit einer Kopie der Eingabedaten oder mit Standardwerten von T, wenn keine Daten bereitgestellt werden.

Syntax

Die Konstruktoren werden nummeriert und weiter unten in Anmerkungen beschrieben.

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;

Vorlagenparameter

typename InIt Ein Eingabe-Iterator, der die Eingabedaten bereitstellt.

size_t N uint32_t N Die Anzahl der Werte (Elemente) in den Eingabedaten.

Parameter

arrayValue A std::array Wert, der das com_array-Objekt initialisiert.

comArrayValue Ein weiteres com_array, das das com_array-Objekt initialisiert. Nachdem der Konstruktor zurückgegeben wurde, ist comArrayValue- leer.

count Die Elementanzahl des com_array-Objekts.

first last Ein Eingabe iteratorenpaar. Die Werte im Bereich [ersten, letzten) werden verwendet, um das com_array-Objekt zu initialisieren.

initializerListValue Ein Initialisierungslistenwert, der das com_array-Objekt initialisiert.

ptr Ein Zeiger auf einen N-Wertblock, den Sie mithilfe CoTaskMemAlloczugewiesen haben. Das com_array-Objekt übernimmt den Besitz dieses Speichers.

rawArrayValue Ein C-Formatarray, das das com_array-Objekt initialisiert.

value Der Wert, der jedem Element des com_array-Objekts zugewiesen werden soll.

vectorValue A std::vector Wert, der das com_array-Objekt initialisiert.

Bemerkungen

Die Konstruktoren werden in Syntax oben nummeriert.

1. Standardkonstruktor

Erstellt einen leeren Puffer.

2. Kapazitätskonstruktor; Standardwert

Erstellt einen Puffer der Anzahl Elemente, die alle Kopien eines standardmäßig konstruierten Tsind.

Dies ähnelt (aber nicht der gleichen) Erstellung eines Puffers Anzahl Elemente, von denen jede eine standardmäßig konstruierte Tist.

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

Der Standardkonstruktor des MediaPlayer Objekts erstellt einen Verweis auf ein neues Media Player-Objekt, und der Kopierkonstruktor kopiert den Verweis. Daher erstellt die obige Codezeile ein Array von 50 Verweisen auf dasselbe Media Player-Objekt. Es erstellt kein Array von 50 verschiedenen Media Player-Objekten.

3. Kapazitätskonstruktor; expliziter Wert

Erstellt einen Puffer Anzahl Elemente, von denen jede eine Kopie des bereitgestellten Wertsist.

winrt::com_array(2, 42) wird als Versuch interpretiert, den Bereichskonstruktor (4) zu verwenden. Aber es schlägt fehl, weil 2 und 42 keine Iteratoren sind. Um dies als Kapazitätskonstruktor mit einem expliziten int32_t-Wert zu interpretieren, verwenden Sie eine explizit nicht signierte ganze Zahl als ersten Parameter: com_array(2u, 42).

4. Bereichskonstruktor

Erstellt einen Puffer, der eine Kopie des Bereichs ist [erste, letzte).

Geben Sie den zugrunde liegenden Typ T explizit an, z. B.

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

Um den Bereich zu verschieben, anstatt ihn zu kopieren, verwenden Sie den std::move_iterator Iteratoradapter.

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

5. Vektorkonstruktor

Erstellt einen Puffer, der eine Kopie des Inhalts von vectorValue-ist.

6. Arraykonstruktor

Erstellt einen Puffer, der eine Kopie des Inhalts von arrayValueist.

7. Arraykonstruktor im C-Stil

Erstellt einen Puffer, der eine Kopie des Inhalts des C-Arrays rawArrayValue-ist.

8. Initializer-Listenkonstruktor

Erstellt einen Puffer, der eine Kopie des Inhalts der Initialisierungsliste initializerListValueist.

9. ABI-Konstruktor

Übernimmt den Besitz eines Puffers der angegebenen Länge.

Diese niedrigste Ebene der Konstruktoren. Verwenden Sie ihn, wenn Sie bereits über CoTaskMemAlloc-einen Speicherblock zugewiesen haben und möchten, dass die com_array dafür verantwortlich ist. Um die besonderen Anforderungen für diesen Konstruktor hervorzuheben, muss das letzte Argument winrt::take_ownership_from_abisein.

10. Konstruktor verschieben

Verschiebt die Ressourcen aus einem anderen com_array desselben Typs, sodass das Ursprüngliche leer bleibt.

Konstruktoren 5, 6 und 7

Kopien werden vom Inhalt des bereitgestellten Containers übernommen. Sie können den Bereichskonstruktor (4) mit dem std::move_iterator Iteratoradapter verwenden, um den Inhalt in die com_array zu verschieben, anstatt sie zu kopieren.

com_array::clear-Funktion

Macht das com_array -Objekt leer.

Syntax

void clear() noexcept;

detach_abi-Funktion

Trennt das com_array-Objekt von seinen Rohwerten, um sie möglicherweise an einen Aufrufer zurückzugeben. Die com_array wird gelöscht. Siehe auch winrt::d etach_abi function.

Syntax

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

Parameter

object Ein com_array Objekt, das ausgeführt werden soll.

Rückgabewert

Ein Tupel mit zwei Elementen, das eine Elementanzahl enthält, und die zusammenhängende Reihe von Werten, die die com_array überspannt haben.

com_array::operator= (Zuordnungsoperator)

Weist dem com_array -Objekt einen Wert zu.

Syntax

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

Parameter

comArrayValue Ein com_array Wert, der dem com_array-Objekt zugewiesen werden soll.

Rückgabewert

Ein Verweis auf das com_array-Objekt.

put_abi-Funktion

Ruft die Adresse des com_array ab, damit sie auf einen anderen Wert festgelegt werden kann. Siehe auch winrt::p ut_abi function.

Syntax

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

Parameter

object Ein com_array Objekt, das ausgeführt werden soll.

Rückgabewert

Die Adresse des com_array, kann auf einen anderen Wert festgelegt werden.

Swap-Funktion

Tauscht den Inhalt der beiden com_array Parameter aus.

Syntax

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

Parameter

left right A com_array Wert, dessen Inhalt sich gegenseitig mit denen des anderen Parameters austauschen soll.

Beispiel

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

Siehe auch