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

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

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

winrt::com_array は winrt::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 T com_array に含まれる値 (要素) の型。

必要条件

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

Namespace: winrt

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

コンス トラクター

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

メンバー関数

機能 形容
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 関数 も参照してください。
スワップ関数 を する 2 つの com_array パラメーターの内容を入れ替えます。

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

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

構文

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

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 N uint32_t N 入力データ内の値 (要素) の数。

パラメーター

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

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

count com_array オブジェクトの要素数。

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

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

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

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

value com_array オブジェクトの各要素に渡す値です。

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

備考

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

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

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

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

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

これは、カウント 要素のバッファーを作成するのと似ていますが、それぞれ既定で構築された Tです。

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

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

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

カウント 要素のバッファーを作成します。各要素は、指定された 値のコピー

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

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

範囲 [最初の最後の) のコピーであるバッファーを作成します。

次のように、基になる型 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 スタイルの配列コンストラクター

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

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;

パラメーター

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

戻り値

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;

パラメーター

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

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

関連項目

  • winrt 名前空間 を する