modello di struct winrt::implements (C++/WinRT)
Si tratta della base da cui derivano direttamente o indirettamente le proprie implementazioni C++/WinRT (di classi di runtime e factory di attivazione). Implementa una o più interfacce Windows Runtime (specificate come parametri di tipo) e fornisce anche implementazioni efficienti di IUnknown, IInspectable, IAgileObject, IWeakReferenceSource e altri.
Nota
Per altre informazioni sulla derivazione di questo tipo ed esempi, vedere Api di creazione con C++/WinRT.
Punti di estensione in winrt::implements
winrt::implements include punti di estensione che consentono di rinviare la distruzione dei tipi di implementazione, di eseguire query in modo sicuro durante la distruzione e di collegare l'ingresso e uscire dai metodi proiettati. Ecco i nomi dei punti di estensione, insieme ai collegamenti a dettagli ed esempi di codice.
- final_release. Vedere Distruzione posticipata e query sicure durante la distruzione.
- abi_enter, abi_exit e abi_guard. Vedere La voce del metodo e gli hook di uscita.
Tipi di marcatore
Il modello di struct implementa supporta diversi tipi di marcatore usati per eseguire l'override del comportamento predefinito. Ci aspettiamo che questi saranno usati solo raramente; le impostazioni predefinite sono sufficienti per quasi tutti i casi. Un tipo di marcatore può essere visualizzato ovunque nell'elenco di interfacce, ovvero il pacchetto di parametri variadic.
I tipi di marcatore seguenti sono supportati da implementi:
- io con mantello<>
- componibile
- composizione
- non_agile
- no_weak_ref
- no_module_lock
- static_lifetime (per le fabbriche)
Questo primo esempio si applica quando si deriva direttamente da implementi.
struct MyImplementation: implements<MyImplementation, IFrameworkViewSource, no_weak_ref>
{
...
}
Questo esempio successivo è per quando si crea una classe di runtime.
struct BookSku : BookSkuT<BookSku, no_weak_ref>
{
...
}
Sintassi
template <typename D, typename... I>
struct implements
Parametri di modelli
typename D
Nome del tipo derivato.
typename... I
Qualsiasi numero di interfacce da implementare, oltre a qualsiasi tipo di marcatore desiderato.
Per impostazione predefinita, le interfacce derivate da IInspectable vengono segnalate dall'implementazione del metodo IInspectable::GetIids . Usare il cloaked
modello di marcatore per eliminarlo.
Esempio
// App.cpp
...
struct App : implements<App, IFrameworkViewSource>
{
IFrameworkView CreateView()
{
return ...
}
}
...
Requisiti
SDK minimo supportato: Windows SDK versione 10.0.17134.0 (Windows 10, versione 1803)
Spazio dei nomi: winrt
Intestazione: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (incluso per impostazione predefinita)
Funzioni membro
Funzione | Descrizione |
---|---|
implements::AddRef function | Incrementa il conteggio dei riferimenti per l'interfaccia predefinita dell'oggetto implements . |
implementa la funzione::find_inspectable | TBD |
implements::find_interface funzione | Puntatore all'interfaccia implementata dall'oggetto implements , identificato dall'identificatore specificato; non chiama AddRef. |
implements::get_local_iids function | Recupera una tupla a due elementi contenente gli identificatori delle interfacce implementate dall'oggetto implements . |
implements::get_strong funzione | Recupera un riferimento sicuro all'oggetto implementaquesto puntatore. |
Funzione implements::get_weak | Recupera un riferimento debole all'oggetto implementaquesto puntatore. |
implementa la funzione::QueryInterface | Recupera il puntatore all'interfaccia implementata dall'oggetto implements , identificato dall'identificatore specificato; chiama AddRef. |
implementa la funzione::Release | Decrementa il conteggio dei riferimenti per l'interfaccia predefinita dell'oggetto implements . |
Operatori membri
Operatore | Descrizione |
---|---|
implements::operator Windows::Foundation::IInspectable | Converte l'oggetto implementa in un oggetto Windows::Foundation::IInspectable. |
Membri dati
Membro dei dati | Descrizione |
---|---|
m_inner | Accede all'oggetto composto , se applicabile. Per altre informazioni, vedere Derivazione della classe di runtime. |
implements::AddRef function
Incrementa il conteggio dei riferimenti per l'interfaccia predefinita dell'oggetto implements .
Sintassi
unsigned long __stdcall AddRef() noexcept;
Valore restituito
Nuovo conteggio dei riferimenti. Questo valore deve essere usato solo a scopo di test.
implementa la funzione::find_inspectable
Recupera il puntatore all'interfaccia IInspectable implementata dall'oggetto implements . Non chiama AddRef sul puntatore restituito. Questa funzione consente di passare l'oggetto implements a una funzione che prevede un oggetto IInspectable.
Sintassi
::IInspectable* find_inspectable() const noexcept override;
Valore restituito
Puntatore all'interfaccia IInspectable implementata dall'oggetto implements .
implements::find_interface funzione
Recupera il puntatore all'interfaccia implementata dall'oggetto implements , identificato dall'identificatore specificato. Non chiama AddRef sul puntatore restituito.
Sintassi
void* find_interface(winrt::guid const& id) const noexcept override;
Valore restituito
Puntatore all'interfaccia implementata dall'oggetto implements , identificato dall'identificatore specificato.
implements::get_local_iids function
Recupera una tupla a due elementi contenente gli identificatori delle interfacce implementate dall'oggetto implements . Le interfacce "Mantello" non sono incluse.
Sintassi
std::pair<uint32_t, const winrt::guid*> get_local_iids() const noexcept override;
Valore restituito
Tupla a due elementi contenente il numero e gli identificatori delle interfacce implementate dall'oggetto implements .
implements::get_strong funzione
Recupera un riferimento sicuro all'oggetto winrt::implementsdi questo puntatore. Vedi Riferimenti sicuri e deboli in C++/WinRT. Poiché get_strong è una funzione membro del modello di struct winrt::implements , è possibile chiamarla solo da un oggetto che deriva direttamente o indirettamente da winrt::implements, ad esempio un oggetto C++/WinRT. Per altre informazioni sulla derivazione da winrt::implements ed esempi, vedi Creare API con C++/WinRT.
Sintassi
protected:
winrt::com_ptr<D> get_strong() noexcept;
Valore restituito
Riferimento sicuro all'oggetto implementaquesto puntatore.
Funzione implements::get_weak
Recupera un riferimento debole al puntatorewinrt::implements. Vedi Riferimenti sicuri e deboli in C++/WinRT. Poiché get_weak è una funzione membro del modello di struct winrt::implements , è possibile chiamarla solo da un oggetto che deriva direttamente o indirettamente da winrt::implements, ad esempio un oggetto C++/WinRT. Per altre informazioni sulla derivazione da winrt::implements ed esempi, vedi Creare API con C++/WinRT.
Sintassi
protected:
winrt::weak_ref<D> get_weak() noexcept;
Valore restituito
Oggetto weak_ref che rappresenta un riferimento debole al puntatore dell'oggetto implementa.
implementa la funzione::QueryInterface
Recupera il puntatore all'interfaccia implementata dall'oggetto implements , identificato dall'identificatore specificato. Chiama AddRef sul puntatore restituito.
Sintassi
HRESULT __stdcall QueryInterface(winrt::guid const& id, void** object) noexcept;
Valore restituito
Nuovo conteggio dei riferimenti. Questo valore deve essere usato solo a scopo di test.
implementa la funzione::Release
Decrementa il conteggio dei riferimenti per l'interfaccia predefinita dell'oggetto implements .
Sintassi
unsigned long __stdcall Release() noexcept;
Valore restituito
Nuovo conteggio dei riferimenti. Questo valore deve essere usato solo a scopo di test.
implements::operator Windows::Foundation::IInspectable
Converte l'oggetto implementa in un oggetto Windows::Foundation::IInspectable. Questo operatore consente di passare l'oggetto implements a una funzione che prevede un oggetto IInspectable.
Sintassi
operator winrt::Windows::Foundation::IInspectable() const noexcept;
Valore restituito
L'oggetto implementa convertito in windows::Foundation::IInspectable.