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 所包含的值 (elements) 類型。

要求

最低支援的 SDK: Windows SDK 10.0.17134.0 版(Windows 10 版本 1803)

Namespace: winrt

標頭: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\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 函式
交換函式 交換兩個 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 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 樣式數組建構函式

建立緩衝區,此緩衝區是 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;

參數

left right 要與其他參數的內容相互交換的 com_array 值。

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

另請參閱