Modelo de struct winrt::com_array (C++/WinRT)
Representa uma matriz de dados de estilo C em que o buffer subjacente é alocado e liberado por meio do alocador de tarefas COM, daí o nome. Normalmente, ele é usado para representar uma matriz compatível com estilo C alocada por um componente e liberada por outro.
winrt::com_array é usado para passar parâmetros de e para Windows Runtime APIs. Se você estiver criando APIs, provavelmente precisará construir um winrt::com_array para retornar uma matriz projetada ao chamador; como o valor retornado ou por meio de um parâmetro de saída.
winrt::com_array deriva de winrt::array_view. Consulte o tópico do modelo de struct winrt::array_view , que documenta membros e operadores gratuitos que também estão disponíveis para winrt::com_array. No entanto, lembre-se da diferença na semântica entre o tipo base winrt::array_view (que é uma exibição não proprietária, ou span, de uma série contígua de valores) e winrt::com_array (que aloca e libera seus próprios elementos).
Syntax
template <typename T>
struct com_array : winrt::array_view<T>
Parâmetros de modelo
typename T
O tipo dos valores (elementos) que o com_array contém.
Requisitos
SDK mínimo com suporte: Windows SDK versão 10.0.17134.0 (Windows 10, versão 1803)
Namespace: winrt
Cabeçalho: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (incluído por padrão)
Construtores
Construtor | Descrição |
---|---|
Construtor com_array::com_array | Inicializa uma nova instância do struct com_array com uma cópia dos dados de entrada ou com valores padrão de T se nenhum dado for fornecido. |
Funções de membro
Função | Descrição |
---|---|
função com_array::clear | Torna o objeto com_array vazio. |
Operadores membros
Operador | Descrição |
---|---|
com_array::operator= (operador de atribuição) | Atribui um valor ao objeto com_array . |
Funções gratuitas
Função | Descrição |
---|---|
função detach_abi | Desanexa o objeto com_array de seus valores brutos, talvez para devolvê-los a um chamador. O com_array está limpo. Consulte também a função winrt::d etach_abi. |
função put_abi | Recupera o endereço do com_array para que ele possa ser definido como outro valor. Consulte também a função winrt::p ut_abi. |
função swap | Troca o conteúdo dos dois parâmetros de com_array . |
Construtor com_array::com_array
Inicializa uma nova instância do struct com_array com uma cópia dos dados de entrada ou com valores padrão de T
se nenhum dado for fornecido.
Syntax
Os construtores são numerados e descritos mais adiante em Comentários abaixo.
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 modelo
typename InIt
Um iterador de entrada, que fornece os dados de entrada.
size_t N
uint32_t N
O número de valores (elementos) nos dados de entrada.
Parâmetros
arrayValue
Um valor std::array que inicializa o objeto com_array .
comArrayValue
Outro com_array que inicializa o objeto com_array . Após o retorno do construtor, o comArrayValue ficará vazio.
count
A contagem de elementos do objeto com_array .
first
last
Um par de iteradores de entrada. Os valores no intervalo [primeiro, último) são usados para inicializar o objeto com_array .
initializerListValue
Um valor de lista de inicializador que inicializa o objeto com_array .
ptr
Um ponteiro para um bloco de valores N, que você alocou usando CoTaskMemAlloc. O objeto com_array se apropria dessa memória.
rawArrayValue
Uma matriz de estilo C que inicializa o objeto com_array .
value
O valor a ser entregue a cada elemento do objeto com_array .
vectorValue
Um valor std::vector que inicializa o objeto com_array .
Comentários
Os construtores são numerados na sintaxe acima.
1. Construtor padrão
Constrói um buffer vazio.
2. Construtor de capacidade; valor padrão
Cria um buffer de elementos de contagem , todos copiados de um T construído por padrão.
Isso é semelhante a (mas não o mesmo que) criar um buffer de elementos de contagem , cada um dos quais é um T construído por padrão.
auto players{ winrt::com_array<MediaPlayer>(50) };
O construtor padrão do objeto MediaPlayer cria uma referência a um novo objeto de player de mídia e seu construtor de cópia copia a referência. Portanto, a linha de código acima cria uma matriz de 50 referências ao mesmo objeto de player de mídia. Ele não cria uma matriz de 50 objetos diferentes do player de mídia.
3. Construtor de capacidade; valor explícito
Cria um buffer de elementos de contagem , cada um deles uma cópia do valor fornecido.
winrt::com_array(2, 42)
é interpretado como uma tentativa de usar o construtor de intervalo (4). Mas falha porque 2 e 42 não são iteradores. Para que isso seja interpretado como um construtor de capacidade com um valor int32_t explícito, use um inteiro explicitamente sem sinal como o primeiro parâmetro: com_array(2u, 42)
.
4. Construtor de intervalo
Cria um buffer que é uma cópia do intervalo [primeiro, último).
Declare o tipo T subjacente explicitamente, assim.
auto a{ winrt::com_array<T>(source.begin(), source.end()) };
Para mover o intervalo, em vez de copiá-lo, use o adaptador de iterador std::move_iterator .
auto a{ winrt::com_array<T>(std::move_iterator(source.begin()),
std::move_iterator(source.end())) };
5. Construtor vetor
Cria um buffer que é uma cópia do conteúdo de vectorValue.
6. Construtor de matriz
Cria um buffer que é uma cópia do conteúdo de arrayValue.
7. Construtor de matriz no estilo C
Cria um buffer que é uma cópia do conteúdo da matriz de estilo C rawArrayValue.
8. Construtor de lista de inicializadores
Cria um buffer que é uma cópia do conteúdo da lista de inicializadores initializer InitializerListValue.
9. Construtor ABI
Assume a propriedade de um buffer de comprimento especificado.
Este nível mais baixo dos construtores. Use-o quando você tiver um bloco de memória já alocado por meio do CoTaskMemAlloc e quiser que o com_array assuma a responsabilidade por ela. Para enfatizar os requisitos especiais para esse construtor, o argumento final deve ser winrt::take_ownership_from_abi.
10. Mover construtor
Move os recursos de outro com_array do mesmo tipo, deixando o original vazio.
Construtores 5, 6 e 7
As cópias são retiradas do conteúdo do contêiner fornecido. Você pode usar o construtor de intervalo (4) com o adaptador do iterador std::move_iterator para mover o conteúdo para o com_array em vez de copiá-los.
função com_array::clear
Torna o objeto com_array vazio.
Syntax
void clear() noexcept;
função detach_abi
Desanexa o objeto com_array de seus valores brutos, talvez para devolvê-los a um chamador. O com_array está limpo. Consulte também a função winrt::d etach_abi.
Sintaxe
auto detach_abi(winrt::com_array<T>& object) noexcept;
auto detach_abi(winrt::com_array<T>&& object) noexcept;
Parâmetros
object
Um objeto com_array para operar.
Valor retornado
Uma tupla de dois elementos que contém uma contagem de elementos e a série contígua de valores que o com_array estendeu.
com_array::operator= (operador de atribuição)
Atribui um valor ao objeto com_array .
Sintaxe
com_array& operator=(winrt::com_array&& comArrayValue) noexcept;
Parâmetros
comArrayValue
Um valor com_array a ser atribuído ao objeto com_array .
Valor retornado
Uma referência ao objeto com_array .
função put_abi
Recupera o endereço do com_array para que ele possa ser definido como outro valor. Consulte também a função winrt::p ut_abi.
Sintaxe
template<typename T> auto put_abi(winrt::com_array<T>& object) noexcept;
Parâmetros
object
Um objeto com_array para operar.
Valor retornado
O endereço do com_array, pronto para ser definido como outro valor.
função swap
Troca o conteúdo dos dois parâmetros com_array .
Sintaxe
friend void swap(winrt::com_array& left, winrt::com_array& right) noexcept;
Parâmetros
left
right
Um com_array valor cujo conteúdo deve ser alternado mutuamente com os do outro parâmetro.
Exemplo
using namespace winrt;
...
com_array<byte> left{ 1,2,3 };
com_array<byte> right{ 4,5,6 };
swap(left, right);
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de