winrt::com_array結構範本 (C++/WinRT)

表示 C 樣式一致性的資料陣列,其中基礎緩衝區是透過 COM 工作配置器配置和釋放,因此名稱。 它通常用來代表一個元件所配置的 C 樣式一致性陣列,並由另一個元件釋放。

winrt::com_array用於將參數傳遞至 Windows 執行階段 API,以及從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)

命名空間: winrt

標頭: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion <> \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 函式
swap 函式 交換兩 個com_array 參數的內容。

com_array::com_array 建構函式

使用輸入資料的複本,或未提供任何資料的預設值 T ,初始化com_array結構的新實例。

語法

The constructors are numbered, and described further in Remarks below.

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 輸入資料中) (元素的值數目。

參數

arrayValuestd::array值,初始化com_array物件。

comArrayValue另一個初始化com_array物件的com_array。 建構函式傳回之後, comArrayValue 會是空的。

countcom_array物件的專案計數。

firstlast 一對輸入反覆運算器。 範圍 [firstlast) 中的值是用來初始化 com_array 物件。

initializerListValue 初始化運算式清單值,初始化 com_array 物件。

ptr 使用 CoTaskMemAlloc配置之 N 值的區塊指標。 com_array物件會取得此記憶體的擁有權。

rawArrayValue 初始化 com_array 物件的 C 樣式陣列。

value 要提供給 com_array 物件之每個元素的值。

vectorValue初始化com_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. 範圍建構函式

建立緩衝區,此緩衝區是範圍 [firstlast) 的複本。

明確陳述基礎類型 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 跨越的連續數列值。

com_array::operator= (指派運算子)

將值指派給 com_array 物件。

語法

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

參數

comArrayValue要指派給com_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 函式

交換兩 個com_array 參數的內容。

語法

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

參數

leftrightcom_array值,其內容要與其他參數的內容相互交換。

範例

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

另請參閱