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 |
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
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.
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
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);