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 N
uint32_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 .
first
last
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
left
right
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für