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 |
Recupera la dirección del com_array para que se pueda establecer en otro valor. Consulte también función winrt::p ut_abi. |
|
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
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);