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.
- final_release. Confira Destruição adiada e Consultas seguras durante a destruição.
- abi_enter, abi_exit e abi_guard. Consulte Ganchos de entrada e saída do método.
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:
- camuflado<I>
- combinável
- compondo
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (para fábricas)
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.