Compartilhar via


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 de conformidade no estilo C alocada por um componente e liberada por outro.

winrt::com_array é usado para passar parâmetros de e para APIs do Windows Runtime. 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 intervalo, de uma série contígua de valores) e winrt::com_array (que aloca e libera seus próprios elementos).

Sintaxe

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: SDK do Windows versão 10.0.17134.0 (Windows 10, versão 1803)

Namespace : winrt

Cabeçalho : %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\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
de função com_array::clear Torna o objeto com_array vazio.

Operadores de membro

Operador Descrição
com_array::operator= (operador de atribuição) Atribui um valor ao objeto com_array.

Funções gratuitas

Função Descrição
detach_abi função Desanexa o objeto com_array de seus valores brutos, talvez para devolvê-los a um chamador. O com_array está limpo. Consulte também função winrt::d etach_abi.
put_abi função Recupera o endereço do com_array para que ele possa ser definido como outro valor. Consulte também função winrt::p ut_abi.
função de troca Troca o conteúdo dos dois parâmetros 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.

Sintaxe

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

um valor std::array que inicializa o objeto com_array.

comArrayValue Outro com_array que inicializa o objeto com_array. Depois que o construtor retornar, comArrayValue estará vazio.

count A contagem de elementos do objeto com_array.

first last um par de iteradores de entrada. Os valores no intervalo [primeiro, última) são usados para inicializar o objeto com_array.

initializerListValue Um valor de lista de inicializadores que inicializa o objeto com_array.

ptr um ponteiro para um bloco de valores N, que você alocou usando coTaskMemAlloc. O objeto com_array assume a propriedade dessa memória.

rawArrayValue uma matriz de estilo C que inicializa o objeto com_array.

value o valor a ser fornecido a cada elemento do objeto com_array.

um valor std::vector que inicializa o objeto com_array.

Observações

Os construtores são numerados em sintaxe acima.

1. Construtor padrão

Constrói um buffer vazio.

2. Construtor de capacidade; valor padrão

Cria um buffer de contagem elementos, todos copiados de umT construído por padrão.

Isso é semelhante a (mas não o mesmo que) criar um buffer de contagem elementos, cada um dos quais é um T.

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

O construtor padrão do MediaPlayer objeto 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 do 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 contagem elementos, cada um deles uma cópia do valor de 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 subjacente T 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 de 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 de 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 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 de 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 de 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.

Sintaxe

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 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 em que operar.

Valor de retorno

Uma tupla de dois elementos que contém uma contagem de elementos e a série contígua de valores que o com_array se 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 de retorno

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 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 em que operar.

Valor de retorno

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 valor com_array 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);

Consulte também