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

Stellt ein konformes C-Format-Array von Daten dar, in dem der zugrunde liegende Puffer zugewiesen und über den COM-Vorgangs-Allocator freigegeben wird, daher der Name. Es wird in der Regel verwendet, um ein C-formatkonformes Array darzustellen, das einer Komponente zugeordnet ist und von einer anderen freigestellt wird.

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

winrt::com_array abgeleitet von winrt::array_view. Weitere Informationen finden Sie im Thema "winrt::array_view Strukturvorlage", in dem Mitglieder und kostenlose Operatoren dokumentiert werden, die auch für winrt::com_array verfügbar sind. Beachten Sie jedoch den Unterschied zwischen der Semantik zwischen dem Basistyp winrt::array_view (was eine nicht eigene Ansicht ist oder eine zusammenhängende Reihe von Werten), und winrt::com_array (was seine eigenen Elemente zuordnet und freigibt).

Syntax

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

Vorlagenparameter

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

Anforderungen

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

Namespace: winrt

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

Konstruktoren

Konstruktor BESCHREIBUNG
com_array::com_array Konstruktor Initialisiert eine neue Instanz der com_array-Struktur mit einer Kopie der Eingabedaten oder mit Standardwerten, 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, vielleicht um sie an einen Aufrufer zurückzugeben. Die com_array wird gelöscht. Siehe winrt::d etach_abi-Funktion.
put_abi Funktion Ruft die Adresse des com_array ab, damit er auf einen anderen Wert festgelegt werden kann. Siehe winrt::p ut_abi-Funktion.
swap-Funktion Wechselt den Inhalt der beiden com_array Parameter.

com_array::com_array Konstruktor

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

Syntax

Die Konstruktoren werden nummeriert und weiter unten in den 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 Nuint32_t N Die Anzahl der Werte (Elemente) in den Eingabedaten.

Parameter

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

firstlast Ein Paar Eingabe-Iteratoren. Die Werte im Bereich [first, last) werden verwendet, um das com_array-Objekt zu initialisieren.

initializerListValue Ein Initializer-Listenwert, der das com_array-Objekt initialisiert.

ptr Ein Zeiger auf einen Block von N-Werten, den Sie mithilfe von CoTaskMemAlloc zugewiesen haben. Das com_array-Objekt übernimmt diesen Speicher.

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

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

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

Hinweise

Die Konstruktoren werden oben in Syntax nummeriert.

1. Standardkonstruktor

Erstellt einen leeren Puffer.

2. Kapazitätskonstruktor; Standardwert

Erstellt einen Puffer von Anzahlelementen , von denen alle Kopien eines standardmäßig erstellten T sind.

Dies ist ähnlich (aber nicht identisch mit dem Erstellen eines Puffers von Anzahlelementen , der jeweils ein standardgebaute T ist).

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

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

3. Kapazitätskonstruktor; expliziter Wert

Erstellt einen Puffer von Anzahlelementen , die jeweils eine Kopie des angegebenen Werts sind.

winrt::com_array(2, 42) wird als Versuch interpretiert, den Bereichskonstruktor (4) zu verwenden. Aber es schlägt fehl, da 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 erster Parameter: com_array(2u, 42)

4. Bereichskonstruktor

Erstellt einen Puffer, der eine Kopie des Bereichs [zuerst, zuletzt) ist.

Geben Sie den zugrunde liegenden Typ T explizit an, wie folgt.

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

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

7. C-Stil-Arraykonstruktor

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

8. Initializer-Listenkonstruktor

Erstellt einen Puffer, der eine Kopie des Inhalts der Initializerliste initializerListValue ist.

9. ABI-Konstruktor

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

Diese niedrigste Ebene der Konstruktoren. Verwenden Sie es, wenn Sie einen Speicherblock haben, der bereits über CoTaskMemAlloc zugewiesen wurde, und Sie möchten, dass die com_array für sie verantwortlich sind. Um die besonderen Anforderungen für diesen Konstruktor hervorzuheben, muss das endgültige Argument winrt::take_ownership_from_abi sein.

10. Konstruktor verschieben

Verschiebt die Ressourcen aus einem anderen com_array desselben Typs, wobei 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 Iterator-Adaptor verwenden, um den Inhalt in den 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, vielleicht um sie an einen Aufrufer zurückzugeben. Die com_array wird gelöscht. Siehe winrt::d etach_abi-Funktion.

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 zweielementiges Tuple, 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 er auf einen anderen Wert festgelegt werden kann. Siehe winrt::p ut_abi-Funktion.

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, bereit, auf einen anderen Wert festzulegen.

swap-Funktion

Wechselt den Inhalt der beiden com_array Parameter.

Syntax

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

Parameter

leftright Ein 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