Compartir a través de


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 libre por otra.

winrt::com_array se usa para pasar parámetros hacia y desde las API de Windows Runtime. 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 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)

Namespace: winrt

encabezado : %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (incluido de forma predeterminada)

Constructores

Constructor Descripción
com_array::com_array constructor Inicializa una nueva instancia del com_array estructura 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
com_array::clear de función 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
detach_abi de función Desasocia el objeto com_array de sus valores sin procesar, quizás para devolverlos a un autor de llamada. Se borra el com_array. Consulte también función winrt::d etach_abi.
de función put_abi Recupera la dirección del com_array para que se pueda establecer en otro valor. Consulte también función winrt::p ut_abi.
función de intercambio Intercambia el contenido de los dos parámetros com_array.

constructor com_array::com_array

Inicializa una nueva instancia del com_array estructura 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 N uint32_t N El 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.

first last 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 inicializadores 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 una 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.

Observaciones

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 recuento de elementos, todos los cuales son copias de un T construido de forma predeterminada.

Esto es similar a (pero no al mismo que) que crea un búfer de recuento elementos, cada uno de los cuales es un Tconstruido de forma predeterminada.

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

El constructor predeterminado del objeto MediaPlayer crea una referencia a un nuevo objeto del 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 recuento de elementos, cada uno de los cuales es una copia del valor de 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 un 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 de intervalo

Crea un búfer que es una copia del intervalo [primera, última).

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

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

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

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

5. Constructor vector

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 desea que el com_array asuma la responsabilidad de él. Para resaltar los requisitos especiales de este constructor, el argumento final debe ser winrt::take_ownership_from_abi.

10. Constructor move

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 std::move_iterator de para mover el contenido a la com_array en lugar de copiarlos.

función com_array::clear

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 autor de llamada. Se borra el com_array. Consulte también 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 un 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 de com_array que se va a asignar al objeto com_array.

Valor devuelto

Referencia al objeto com_array.

función put_abi

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

Sintaxis

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

Parámetros

object un objeto com_array en el que operar.

Valor devuelto

Dirección del com_array, listo 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

left right valor de 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

  • de espacio de nombres winrt