Plantilla de estructura winrt::com_array (C++/WinRT)

Representa una matriz de datos conforme al estilo C en la que se asigna y libera el búfer subyacente a través del asignador de tareas COM, por lo tanto, el nombre. Normalmente se usa para representar una matriz compatible de estilo C asignada por un componente y que se libera por otra.

winrt::com_array se usa para pasar parámetros a y desde Windows Runtime API. Si vas a crear API, probablemente tendrás que construir un winrt::com_array para devolver una matriz proyectada al autor de la llamada; ya sea como valor devuelto o a través de un parámetro de salida.

winrt::com_array deriva de winrt::array_view. Consulta el tema de la plantilla de estructura winrt::array_view , que documenta miembros y operadores gratuitos que también están disponibles para winrt::com_array. Sin embargo, tenga en cuenta la diferencia en la semántica entre el tipo base winrt::array_view (que es una vista no propietaria, o un intervalo, de una serie contigua de valores) y winrt::com_array (que asigna y libera sus propios elementos).

Sintaxis

template <typename T>
struct com_array : winrt::array_view<T>

Parámetros de plantilla

typename T Tipo de los valores (elementos) que contiene el com_array .

Requisitos

SDK mínimo admitido: Windows SDK versión 10.0.17134.0 (Windows 10, versión 1803)

Espacio de nombres: winrt

Encabezado: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (incluido de forma predeterminada)

Constructores

Constructor Descripción
constructor com_array::com_array Inicializa una nueva instancia de la estructura com_array con una copia de los datos de entrada o con valores predeterminados de T si no se proporciona ningún dato.

Funciones miembro

Función Descripción
función com_array::clear Hace que el objeto com_array esté vacío.

Operadores de miembro

Operador Descripción
com_array::operator= (operador de asignación) Asigna un valor al objeto com_array .

Funciones gratuitas

Función Descripción
Función detach_abi Desasocia el objeto com_array de sus valores sin procesar, quizás para devolverlos a un llamador. Se borra el com_array . Consulte también la función winrt::d etach_abi.
función put_abi Recupera la dirección del com_array para que se pueda establecer en otro valor. Consulte también la función winrt::p ut_abi.
Función swap Intercambia el contenido de los dos parámetros com_array .

constructor com_array::com_array

Inicializa una nueva instancia de la estructura com_array con una copia de los datos de entrada o con valores predeterminados de T si no se proporciona ningún dato.

Sintaxis

Los constructores se numeran y se describen más adelante en Comentarios a continuación.

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;

Parámetros de plantilla

typename InIt Iterador de entrada, que proporciona los datos de entrada.

size_t Nuint32_t N Número de valores (elementos) de los datos de entrada.

Parámetros

arrayValue Valor std::array que inicializa el objeto com_array .

comArrayValue Otro com_array que inicializa el objeto com_array . Una vez devuelto el constructor, comArrayValue estará vacío.

count Recuento de elementos del objeto com_array .

firstlast Un par de iteradores de entrada. Los valores del intervalo [primero, último) se usan para inicializar el objeto com_array .

initializerListValue Valor de lista de inicializador que inicializa el objeto com_array .

ptr Puntero a un bloque de valores N, que ha asignado mediante CoTaskMemAlloc. El objeto com_array toma posesión de esta memoria.

rawArrayValue Matriz de estilo C que inicializa el objeto com_array .

value Valor que se va a proporcionar a cada elemento del objeto com_array .

vectorValue Valor std::vector que inicializa el objeto com_array .

Comentarios

Los constructores se numeran en sintaxis anterior.

1. Constructor predeterminado

Construye un búfer vacío.

2. Constructor de capacidad; valor predeterminado

Crea un búfer de elementos count , todos los cuales son copias de un T construido de forma predeterminada.

Esto es similar a (pero no lo mismo que) crear un búfer de elementos count , cada uno de los cuales es un T construido de forma predeterminada.

auto players{ winrt::com_array<MediaPlayer>(50) };

El constructor predeterminado del objeto MediaPlayer crea una referencia a un nuevo objeto de reproductor multimedia y su constructor de copia copia la referencia. Por lo tanto, la línea de código anterior crea una matriz de 50 referencias al mismo objeto del reproductor multimedia. No crea una matriz de 50 objetos de reproductor multimedia diferentes.

3. Constructor de capacidad; valor explícito

Crea un búfer de elementos count , cada uno de los cuales es una copia del valor proporcionado.

winrt::com_array(2, 42) se interpreta como un intento de usar el constructor de intervalo (4). Pero se produce un error porque 2 y 42 no son iteradores. Para que esto se interprete como constructor de capacidad con un valor de int32_t explícito, use un entero sin signo explícitamente como primer parámetro: com_array(2u, 42).

4. Constructor range

Crea un búfer que es una copia del intervalo [primero, último).

Indique explícitamente el tipo subyacente T , como este.

auto a{ winrt::com_array<T>(source.begin(), source.end()) };

Para mover el intervalo, en lugar de copiarlo, use el adaptador std::move_iterator iterador.

auto a{ winrt::com_array<T>(std::move_iterator(source.begin()),
                            std::move_iterator(source.end())) };

5. Constructor vectorial

Crea un búfer que es una copia del contenido de vectorValue.

6. Constructor de matriz

Crea un búfer que es una copia del contenido de arrayValue.

7. Constructor de matriz de estilo C

Crea un búfer que es una copia del contenido de la matriz de estilo C rawArrayValue.

8. Constructor initializer-list

Crea un búfer que es una copia del contenido de la lista de inicializadores initializerListValue.

9. Constructor ABI

Toma posesión de un búfer de longitud especificada.

Este nivel más bajo de los constructores. Úselo cuando tenga un bloque de memoria ya asignado a través de CoTaskMemAlloc y desee que el com_array asuma la responsabilidad de ella. Para resaltar los requisitos especiales para este constructor, el argumento final debe ser winrt::take_ownership_from_abi.

10. Constructor de movimiento

Mueve los recursos de otro com_array del mismo tipo, dejando el original vacío.

Constructores 5, 6 y 7

Las copias se toman del contenido del contenedor proporcionado. Puede usar el constructor de intervalo (4) con el adaptador de iterador std::move_iterator para mover el contenido al com_array en lugar de copiarlos.

com_array::clear (función)

Hace que el objeto com_array esté vacío.

Sintaxis

void clear() noexcept;

Función detach_abi

Desasocia el objeto com_array de sus valores sin procesar, quizás para devolverlos a un llamador. Se borra la com_array . Consulte también la función winrt::d etach_abi.

Sintaxis

auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;

Parámetros

object Objeto com_array en el que operar.

Valor devuelto

Una tupla de dos elementos que contiene un recuento de elementos y la serie contigua de valores que abarca el com_array .

com_array::operator= (operador de asignación)

Asigna un valor al objeto com_array .

Sintaxis

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

Parámetros

comArrayValue Valor com_array que se va a asignar al objeto com_array .

Valor devuelto

Referencia al objeto com_array .

put_abi función

Recupera la dirección del com_array para que se pueda establecer en otro valor. Consulte también la función winrt::p ut_abi.

Sintaxis

template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;

Parámetros

object Objeto com_array en el que operar.

Valor devuelto

La dirección del com_array, lista para establecerse en otro valor.

Función swap

Intercambia el contenido de los dos parámetros com_array .

Sintaxis

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

Parámetros

leftright Valor com_array cuyo contenido se va a intercambiar mutuamente con los del otro parámetro.

Ejemplo

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

Consulte también