winrt::com_array 構造体テンプレート (C++/WinRT)
基になるバッファーが COM タスク アロケーターを介して割り当てられ、解放されるデータの C スタイルの準拠配列を表します。そのため、名前です。 これは通常、あるコンポーネントによって割り当てられ、別のコンポーネントによって解放される C スタイルの準拠配列を表すために使用されます。
winrt::com_array は、Windows ランタイム API との間でパラメーターを渡すために使用されます。 API を作成する場合は、投影された配列を呼び出し元に返すために、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 オブジェクトに値を割り当てます。 |
無料の関数
機能 | 形容 |
---|---|
関数 |
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 スタイルの配列コンストラクター
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;
パラメーター
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 名前空間 を
する