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);