winrt::com_array 構造体テンプレート (C++/WinRT)

基になるバッファーが COM タスク アロケーターを介して割り当てられ解放されるデータの C スタイルの準拠配列を表します。そのため、名前です。 これは通常、あるコンポーネントによって割り当てられ、別のコンポーネントによって解放される C スタイルの準拠配列を表すために使用されます。

winrt::com_array は、WINDOWS ランタイム API との間でパラメーターを渡すために使用されます。 API を作成する場合は、おそらく winrt::com_array を作成して、投影された配列を呼び出し元に返す必要があります。戻り値として、または出力パラメーターを使用します。

winrt::com_arraywinrt::array_view から派生します。 winrt::array_view 構造体テンプレートのトピックを参照してください。このトピックでは、winrt::com_array でも使用できるメンバーと無料の演算子を文書化しています。 ただし、基本型 winrt::array_view (連続する一連の値の非所有ビューまたはスパン) と winrt::com_array (独自の要素を割り当てて解放する) のセマンティクスの違いに注意してください。

構文

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

テンプレート パラメーター

typename Tcom_arrayに含まれる値 (要素) の型。

必要条件

サポートされている最小 SDK: Windows SDK バージョン 10.0.17134.0 (Windows 10、バージョン 1803)

名前空間: winrt

ヘッダー: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (既定で含まれています)

コンストラクター

コンストラクター 説明
com_array::com_array コンストラクター 入力データのコピーを使用するか、データが指定されていない場合の既定値を使用して、 com_array 構造体の T 新しいインスタンスを初期化します。

メンバー関数

機能 説明
com_array::clear 関数 com_array オブジェクトを空にします。

メンバー演算子

演算子 説明
com_array::operator= (代入演算子) com_array オブジェクトに値を割り当てます。

無料の関数

機能 説明
detach_abi 関数 com_array オブジェクトを生の値からデタッチし、呼び出し元に返す場合があります。 com_arrayはクリアされます。 winrt::d etach_abi 関数も参照してください。
put_abi関数 別の値に設定できるように 、com_array のアドレスを取得します。 winrt::p ut_abi 関数も参照してください。
swap 関数 2 つの com_array パラメーターの内容を入れ替えます。

com_array::com_array コンストラクター

入力データのコピーを使用するか、データが指定されていない場合の既定値を使用して、 com_array 構造体の T 新しいインスタンスを初期化します。

構文

コンストラクターには番号が付けられます。詳細については、以下の 「解説」 を参照してください。

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 入力データを提供する入力反復子。

size_t Nuint32_t N 入力データ内の値 (要素) の数。

パラメーター

arrayValuecom_array オブジェクトを初期化する std::array 値。

comArrayValue com_array オブジェクトを初期化 する別の com_array 。 コンストラクターが戻ると、 comArrayValue は空になります。

countcom_array オブジェクトの要素数。

firstlast 入力反復子のペア。 範囲 [first, last) の値は、 com_array オブジェクトを初期化するために使用されます。

initializerListValuecom_array オブジェクトを初期化する初期化子リスト値。

ptrCoTaskMemAlloc を使用して割り当てた N 値のブロックへのポインター。 com_array オブジェクトは、このメモリの所有権を取得します。

rawArrayValuecom_array オブジェクトを初期化する C スタイルの配列。

valuecom_array オブジェクトの各要素に与える値。

vectorValuecom_array オブジェクトを初期化する std::vector 値。

注釈

コンストラクターには上記の 構文 で番号が付けられます。

1. 既定のコンストラクター

空のバッファーを構築します。

2. 容量コンストラクター。既定値

count 要素のバッファーを作成します。これらはすべて、既定で構築された T のコピーです。

これは 、count 要素のバッファーを作成する (ただし同じではありませんが) 似ていますが、それぞれが既定で構築された T です。

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

MediaPlayer オブジェクトの既定のコンストラクターは、新しいメディア プレーヤー オブジェクトへの参照を作成し、そのコピー コンストラクターが参照をコピーします。 したがって、上記のコード行は、同じメディア プレーヤー オブジェクトへの 50 個の参照の配列を作成します。 50 個の異なるメディア プレーヤー オブジェクトの配列は作成されません。

3. 容量コンストラクター。明示的な値

count 要素のバッファーを作成します。それぞれが指定されたのコピーです。

winrt::com_array(2, 42) は、範囲コンストラクター (4) を使用する試みとして解釈されます。 ただし、2 と 42 は反復子ではないので失敗します。 これを明示的な int32_t 値を持つ容量コンストラクターとして解釈されるようにするには、最初のパラメーターとして明示的に符号なし整数を使用します com_array(2u, 42)

4. 範囲コンストラクター

範囲 [first, last] のコピーであるバッファーを作成 します

次のように、基になる型 T を明示的に指定します。

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

範囲をコピーするのではなく移動するには、 std::move_iterator 反復子アダプターを使用します。

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

5. ベクター コンストラクター

vectorValue の内容のコピーであるバッファーを作成します。

6. 配列コンストラクター

arrayValue の内容のコピーであるバッファーを作成します。

7. C スタイルの配列コンストラクター

C スタイルの配列 rawArrayValue の内容のコピーであるバッファーを作成します。

8. Initializer-list コンストラクター

初期化子リスト initializerListValue の内容のコピーであるバッファーを作成します。

9. ABI コンストラクター

指定した長さのバッファーの所有権を取得します。

このコンストラクターの最も低いレベル。 CoTaskMemAlloc を使用して既に割り当てられているメモリ ブロックがあり、com_arrayがそれに対して責任を負う必要がある場合に使用します。 このコンストラクターの特別な要件を強調するには、最終的な引数を winrt::take_ownership_from_abi にする必要があります。

10. コンストラクターの移動

同じ種類の別の com_array からリソースを移動し、元の空のままにします。

コンストラクター 5、6、および 7

指定されたコンテナーの内容のコピーが取得されます。 範囲コンストラクター (4) を std::move_iterator 反復子アダプターと共に使用して、内容をコピーするのではなく 、com_array に移動できます。

com_array::clear 関数

com_array オブジェクト 空にします。

構文

void clear() noexcept;

detach_abi 関数

com_array オブジェクトを生の値からデタッチして、呼び出し元に返す場合があります。 com_arrayはクリアされます。 winrt::d etach_abi 関数も参照してください。

構文

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

パラメーター

object 操作 するcom_array オブジェクト。

戻り値

要素数と、 com_array がスパンした連続した一連の値を含む 2 要素タプル。

com_array::operator= (代入演算子)

com_array オブジェクトに値を割り当てます。

構文

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

パラメーター

comArrayValuecom_array オブジェクトに割り当てるcom_array値。

戻り値

com_array オブジェクトへの参照。

put_abi関数

別の値に設定できるように 、com_array のアドレスを取得します。 winrt::p ut_abi 関数も参照してください。

構文

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

パラメーター

object 操作 するcom_array オブジェクト。

戻り値

別の値に設定できる com_arrayのアドレス。

swap 関数

2 つのcom_array パラメーターの内容 入れ替えます。

構文

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

パラメーター

leftright他のパラメーターの内容と相互にスワップする内容を持つcom_array値。

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

関連項目