шаблон структуры winrt::com_array (C++/WinRT)
Представляет соответствующий массив данных в стиле C, где базовый буфер выделяется и освобождается с помощью средства выделения задач COM, следовательно, имя. Обычно он используется для представления соответствующего массива стилей C, который выделяется одним компонентом и освобождается другим.
winrt::com_array используется для передачи параметров в API среды выполнения Windows и из него. Если вы создаете 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%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (включен по умолчанию)
Конструктор | Описание |
---|---|
конструктор com_array::com_array | Инициализирует новый экземпляр структуры com_array с копией входных данных или значениями по умолчанию T если данные не предоставлены. |
Функция | Описание |
---|---|
com_array::clear function | Делает объект com_array пустым. |
Оператор | Описание |
---|---|
com_array::operator= (оператор назначения) | Назначает значение объекту com_array. |
Функция | Описание |
---|---|
detach_abi функции | Отсоединяет объект com_array от необработанных значений, возможно, чтобы вернуть их вызывающему объекту. com_array очищается. См. также функцию winrt::d etach_abi. |
функции |
Извлекает адрес com_array, чтобы его можно было задать для другого значения. См. также функцию winrt::p ut_abi. |
функции замены |
Переключает содержимое двух параметров 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
значение std::array, которое инициализирует объект com_array.
comArrayValue
другой com_array, который инициализирует объект com_array. После возврата конструктора comArrayValue будет пустым.
count
Число элементов объекта com_array.
first
last
пару входных итераторов. Значения в диапазоне [первый, последний) используются для инициализации объекта com_array.
initializerListValue
значение списка инициализатора, которое инициализирует объект com_array.
ptr
Указатель на блок значений N, выделенный с помощью CoTaskMemAlloc. Объект com_array владеет этой памятью.
rawArrayValue
массив стилей C, который инициализирует объект com_array.
value
Значение для каждого элемента объекта com_array.
vectorValue
значение std::vector, которое инициализирует объект com_array.
Конструкторы нумеруются в синтаксисе выше.
Создает пустой буфер.
Создает буфер счетчика элементов, все из которых являются копиями по умолчанию.
Это похоже на создание буфера подсчета элементов, каждое из которых является Tпо умолчанию.
auto players{ winrt::com_array<MediaPlayer>(50) };
Конструктор по умолчанию MediaPlayer создает ссылку на новый объект проигрывателя мультимедиа, а его конструктор копирования копирует ссылку. Таким образом, указанная выше строка кода создает массив из 50 ссылок на тот же объект проигрывателя мультимедиа. Он не создает массив из 50 различных объектов проигрывателя мультимедиа.
Создает буфер счетчика элементов, каждый из которых является копией предоставленного значения .
winrt::com_array(2, 42)
интерпретируется как попытка использовать конструктор диапазона (4). Но это не так, потому что 2 и 42 не являются итераторами. Чтобы получить его интерпретировать как конструктор емкости с явным значением int32_t, используйте явное целое число без знака в качестве первого параметра: com_array(2u, 42)
.
Создает буфер, который является копией диапазона [первый, последний).
Укажите базовый тип 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())) };
Создает буфер, который является копией содержимого vectorValue.
Создает буфер, который является копией содержимого массива массива .
Создает буфер, который является копией содержимого массива стилей C rawArrayValue.
Создает буфер, который является копией содержимого списка инициализатора initializerListValue.
Берет на себя владение буфером указанной длины.
Этот самый низкий уровень конструкторов. Используйте его, если у вас уже выделен блок памяти через CoTaskMemAlloc, и вы хотите, чтобы com_array взять на себя ответственность за него. Чтобы подчеркнуть особые требования для этого конструктора, окончательный аргумент должен быть winrt::take_ownership_from_abi.
Перемещает ресурсы из другого com_array одного типа, оставляя исходное пустое.
Копируются содержимое предоставленного контейнера. Конструктор диапазона (4) можно использовать с std:::move_iterator итератором для перемещения содержимого в com_array вместо копирования.
Делает объект com_array пустым.
void clear() noexcept;
Отсоединяет объект 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.
com_array& operator=(winrt::com_array&& comArrayValue) noexcept;
comArrayValue
значение com_array для назначения объекту com_array.
Ссылка на объект com_array.
Извлекает адрес com_array, чтобы его можно было задать для другого значения. См. также функцию winrt::p ut_abi.
template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;
object
объект com_array для работы.
Адрес com_array, готовый к присвоению другого значения.
Переключает содержимое двух параметров 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