Modelo de struct winrt::implements (C++/WinRT)

Essa é a base da qual suas próprias implementações C++/WinRT (de classes de runtime e fábricas de ativação) derivam direta ou indiretamente. Ele implementa uma ou mais interfaces Windows Runtime (que você especifica a ela como parâmetros de tipo) e também fornece implementações eficientes de IUnknown, IInspectable, IAgileObject, IWeakReferenceSource e outros.

Observação

Para obter mais informações sobre derivação desse tipo e exemplos, consulte Criar APIs com C++/WinRT.

Pontos de extensão em winrt::implements

winrt::implements tem pontos de extensão que permitem adiar a destruição de seus tipos de implementação, consultar com segurança durante a destruição e conectar a entrada e sair de seus métodos projetados. Aqui estão os nomes dos pontos de extensão, juntamente com links para detalhes e exemplos de código.

Tipos de marcador

O modelo de struct implementa vários tipos de marcador que são usados para substituir o comportamento padrão. Esperamos que elas sejam usadas raramente; os padrões são suficientes para quase todos os casos. Um tipo de marcador pode aparecer em qualquer lugar na lista de interfaces, que é o pacote de parâmetros variadic.

Os seguintes tipos de marcador são compatíveis com implementações:

Este primeiro exemplo se aplica quando você deriva diretamente de implementações.

struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
    ...
}

Este próximo exemplo é para quando você está criando uma classe de runtime.

struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
    ...
}

Sintaxe

template <typename D, typename... I>
struct implements

Parâmetros de modelo

typename D Seu nome de tipo derivado.

typename... I Qualquer número de interfaces a serem implementadas, além de qualquer tipo de marcador desejado.

Por padrão, as interfaces derivadas de IInspectable são relatadas pela implementação do método IInspectable::GetIids . Use o cloaked modelo de marcador para suprimir isso.

Exemplo

// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
    IFrameworkView CreateView()
    {
        return ...
    }
}
...

Requisitos

SDK mínimo com suporte: Windows SDK 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)

Funções de membro

Função Descrição
função implements::AddRef Incrementa a contagem de referência para a interface padrão do objeto implements .
função implements::find_inspectable TBD
função implements::find_interface O ponteiro para a interface implementada pelo objeto implements , identificado pelo identificador especificado; não chama AddRef.
função implements::get_local_iids Recupera uma tupla de dois elementos que contém os identificadores das interfaces implementadas pelo objeto implements .
função implements::get_strong Recupera uma referência forte ao objeto implementsdeste ponteiro.
implements::get_weak function Recupera uma referência fraca ao objeto implementsdeste ponteiro.
função implements::QueryInterface Recupera o ponteiro para a interface implementada pelo objeto implements , identificado pelo identificador especificado; chama AddRef.
função implements::Release Diminui a contagem de referência para a interface padrão do objeto implements .

Operadores membro

Operador Descrição
implements::operator Windows::Foundation::IInspectable Converte o objeto implements em um Windows::Foundation::IInspectable.

Membros de dados

Membro de dados Descrição
m_inner Acessa o objeto composto , quando aplicável. Para obter mais informações, consulte Derivação de classe de runtime.

função implements::AddRef

Incrementa a contagem de referência para a interface padrão do objeto implements .

Sintaxe

unsigned long __stdcall AddRef() noexcept;

Retornar valor

A nova contagem de referências. Esse valor destina-se a ser usado apenas para fins de teste.

função implements::find_inspectable

Recupera o ponteiro para a interface IInspectable implementada pelo objeto implements . Não chama AddRef no ponteiro que ele retorna. Essa função permite que você passe o objeto implements para uma função que espera um IInspectable.

Sintaxe

::IInspectable* find_inspectable() const noexcept override;

Retornar valor

O ponteiro para a interface IInspectable implementada pelo objeto implementa .

função implements::find_interface

Recupera o ponteiro para a interface implementada pelo objeto implements , identificado pelo identificador especificado. Não chama AddRef no ponteiro que ele retorna.

Sintaxe

void* find_interface(winrt::guid const& id) const noexcept override;

Retornar valor

O ponteiro para a interface implementada pelo objeto implements , identificado pelo identificador especificado.

função implements::get_local_iids

Recupera uma tupla de dois elementos que contém os identificadores das interfaces implementadas pelo objeto implements . Interfaces "camufladas" não estão incluídas.

Sintaxe

std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;

Retornar valor

Uma tupla de dois elementos que contém o número e os identificadores das interfaces implementadas pelo objeto implements .

função implements::get_strong

Recupera uma forte referência ao objeto winrt::implementsdeste ponteiro. Confira Referências fortes e fracas em C++/WinRT. Como get_strong é uma função membro do modelo de struct winrt::implements , você pode chamá-lo apenas de um objeto que deriva direta ou indiretamente de winrt::implements, como um objeto C++/WinRT. Para obter mais informações sobre derivação de winrt::implements e exemplos, consulte Criar APIs com C++/WinRT.

Sintaxe

protected:
    winrt::com_ptr<D> get_strong() noexcept;

Retornar valor

Uma referência forte ao objeto implementaesse ponteiro.

Função implements::get_weak

Recupera uma referência fraca ao objeto winrt::implementsdeste ponteiro. Confira Referências fortes e fracas em C++/WinRT. Como get_weak é uma função membro do modelo de struct winrt::implements , você pode chamá-lo apenas de um objeto que deriva direta ou indiretamente de winrt::implements, como um objeto C++/WinRT. Para obter mais informações sobre derivação de winrt::implements e exemplos, consulte Criar APIs com C++/WinRT.

Sintaxe

protected:
    winrt::weak_ref<D> get_weak() noexcept;

Retornar valor

Um objeto weak_ref que representa uma referência fraca ao objeto implementaesse ponteiro.

função implements::QueryInterface

Recupera o ponteiro para a interface implementada pelo objeto implements , identificado pelo identificador especificado. Chama AddRef no ponteiro que ele retorna.

Sintaxe

HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;

Retornar valor

A nova contagem de referências. Esse valor destina-se a ser usado apenas para fins de teste.

função implements::Release

Diminui a contagem de referência para a interface padrão do objeto implements .

Sintaxe

unsigned long __stdcall Release() noexcept;

Retornar valor

A nova contagem de referências. Esse valor destina-se a ser usado apenas para fins de teste.

implements::operator Windows::Foundation::IInspectable

Converte o objeto implements em um Windows::Foundation::IInspectable. Esse operador permite que você passe o objeto implements para uma função que espera um IInspectable.

Sintaxe

operator winrt::Windows::Foundation::IInspectable() const noexcept;

Retornar valor

O implementa o objeto convertido em um Windows::Foundation::IInspectable.

Confira também