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);