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).
template <typename T>
struct com_array : winrt::array_view<T>
typename T
Der Typ der Werte (Elemente), die die com_array enthält.
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)
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. |
Funktion | Beschreibung |
---|---|
com_array::Clear-Funktion | Macht das com_array -Objekt leer. |
Operator | Beschreibung |
---|---|
com_array::operator= (Zuordnungsoperator) | Weist dem com_array -Objekt einen Wert zu. |
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. |
Initialisiert eine neue Instanz der com_array Struktur mit einer Kopie der Eingabedaten oder mit Standardwerten von T
, wenn keine Daten bereitgestellt werden.
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;
typename InIt
Ein Eingabe-Iterator, der die Eingabedaten bereitstellt.
size_t N
uint32_t N
Die Anzahl der Werte (Elemente) in den Eingabedaten.
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.
Die Konstruktoren werden in Syntax oben nummeriert.
Erstellt einen leeren Puffer.
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.
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)
.
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())) };
Erstellt einen Puffer, der eine Kopie des Inhalts von vectorValue-ist.
Erstellt einen Puffer, der eine Kopie des Inhalts von arrayValueist.
Erstellt einen Puffer, der eine Kopie des Inhalts des C-Arrays rawArrayValue-ist.
Erstellt einen Puffer, der eine Kopie des Inhalts der Initialisierungsliste initializerListValueist.
Ü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.
Verschiebt die Ressourcen aus einem anderen com_array desselben Typs, sodass das Ursprüngliche leer bleibt.
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.
Macht das com_array -Objekt leer.
void clear() noexcept;
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.
auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;
object
Ein com_array Objekt, das ausgeführt werden soll.
Ein Tupel mit zwei Elementen, das eine Elementanzahl enthält, und die zusammenhängende Reihe von Werten, die die com_array überspannt haben.
Weist dem com_array -Objekt einen Wert zu.
com_array& operator=(winrt::com_array&& comArrayValue) noexcept;
comArrayValue
Ein com_array Wert, der dem com_array-Objekt zugewiesen werden soll.
Ein Verweis auf das com_array-Objekt.
Ruft die Adresse des com_array ab, damit sie auf einen anderen Wert festgelegt werden kann. Siehe auch winrt::p ut_abi function.
template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;
object
Ein com_array Objekt, das ausgeführt werden soll.
Die Adresse des com_array, kann auf einen anderen Wert festgelegt werden.
Tauscht den Inhalt der beiden com_array Parameter aus.
friend void swap(winrt::com_array& left, winrt::com_array& right) noexcept;
left
right
A com_array Wert, dessen Inhalt sich gegenseitig mit denen des anderen Parameters austauschen soll.
using namespace winrt;
...
com_array<byte> left{ 1,2,3 };
com_array<byte> right{ 4,5,6 };
swap(left, right);