шаблон структуры 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::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.
Замечания
Конструкторы нумеруются в синтаксисе выше.
1. Конструктор по умолчанию
Создает пустой буфер.
2. Конструктор емкости; значение по умолчанию
Создает буфер счетчика элементов, все из которых являются копиями по умолчанию.
Это похоже на создание буфера подсчета элементов, каждое из которых является 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. Конструктор массива
Создает буфер, который является копией содержимого массива массива .
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, готовый к присвоению другого значения.
Функция переключения
Переключает содержимое двух параметров 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