Partager via


winrt::implements, modèle de struct (C++/WinRT)

Il s’agit de la base à partir de laquelle dérivent directement ou indirectement vos propres implémentations C++/WinRT (de classes runtime et de fabriques d’activation). Il implémente une ou plusieurs interfaces Windows Runtime (que vous lui spécifiez en tant que paramètres de type) et fournit également des implémentations efficaces de IUnknown, IInspectable, IAgileObject, IWeakReferenceSource, etc.

Notes

Pour plus d’informations sur la dérivation à partir de ce type et des exemples, consultez Créer des API avec C++/WinRT.

Points d’extension sur winrt ::implements

winrt ::implements a des points d’extension qui vous permettent de différer la destruction de vos types d’implémentation, d’interroger en toute sécurité pendant la destruction et de raccorder l’entrée et la sortie de vos méthodes projetées. Voici les noms des points d’extension, ainsi que des liens vers des détails et des exemples de code.

Types de marqueurs

Le modèle de struct implémente prend en charge plusieurs types de marqueurs qui sont utilisés pour remplacer le comportement par défaut. Nous nous attendons à ce qu’ils ne soient que rarement utilisés ; les valeurs par défaut sont suffisantes pour presque tous les cas. Un type de marqueur peut apparaître n’importe où dans la liste d’interface, qui est le pack de paramètres variadique.

Les types de marqueurs suivants sont pris en charge par les implémentations :

Ce premier exemple s’applique lorsque vous dérivez directement des implémentations.

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

Cet exemple suivant concerne la création d’une classe runtime.

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

Syntax

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

Paramètres de modèle

typename D Nom de votre type dérivé.

typename... I Nombre d’interfaces à implémenter, ainsi que tous les types de marqueurs souhaités.

Par défaut, les interfaces qui dérivent de IInspectable sont signalées par l’implémentation de la méthode IInspectable ::GetIids . Utilisez le cloaked modèle de marqueur pour supprimer cela.

Exemple

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

Configuration requise

Kit de développement logiciel (SDK) minimum pris en charge : Sdk Windows version 10.0.17134.0 (Windows 10, version 1803)

Espace de noms : winrt

En-tête : %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (inclus par défaut)

Fonctions Membre

Fonction Description
implements ::AddRef, fonction Incrémente le nombre de références pour l’interface par défaut de l’objet implements .
implements ::find_inspectable, fonction TBD
implements ::find_interface, fonction Pointeur vers l’interface implémentée par l’objet implémente , identifié par l’identificateur spécifié ; n’appelle pas AddRef.
implements ::get_local_iids, fonction Récupère un tuple à deux éléments contenant les identificateurs des interfaces implémentées par l’objet implements .
implements ::get_strong, fonction Récupère une référence forte au pointeur this de l’objet implémente.
implements::get_weak, fonction Récupère une référence faible au pointeur this de l’objet implémente.
implements ::QueryInterface, fonction Récupère le pointeur vers l’interface implémentée par l’objet implements , identifié par l’identificateur spécifié ; appelle AddRef.
implements ::Release, fonction Décrémente le nombre de références pour l’interface par défaut de l’objet implémente .

Opérateurs membres

Opérateur Description
implements ::operator Windows ::Foundation ::IInspectable Convertit l’objet implémente en Windows ::Foundation ::IInspectable.

Membres de données

Membre de données Description
m_inner Accède à l’objet composé , le cas échéant. Pour plus d’informations, consultez Dérivation de classe Runtime.

implements ::AddRef, fonction

Incrémente le nombre de références pour l’interface par défaut de l’objet implements .

Syntaxe

unsigned long __stdcall AddRef() noexcept;

Valeur de retour

Nouveau nombre de références. Cette valeur est destinée à être utilisée uniquement à des fins de test.

implements ::find_inspectable, fonction

Récupère le pointeur vers l’interface IInspectable implémentée par l’objet implements . N’appelle pas AddRef sur le pointeur qu’il retourne. Cette fonction vous permet de passer l’objet implements à une fonction qui attend un IInspectable.

Syntaxe

::IInspectable* find_inspectable() const noexcept override;

Valeur de retour

Pointeur vers l’interface IInspectable implémentée par l’objet implements .

implements ::find_interface, fonction

Récupère le pointeur vers l’interface implémentée par l’objet implements , identifié par l’identificateur spécifié. N’appelle pas AddRef sur le pointeur qu’il retourne.

Syntaxe

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

Valeur de retour

Pointeur vers l’interface implémentée par l’objet implémente , identifié par l’identificateur spécifié.

implements ::get_local_iids, fonction

Récupère un tuple à deux éléments contenant les identificateurs des interfaces implémentées par l’objet implements . Les interfaces « masquées » ne sont pas incluses.

Syntaxe

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

Valeur de retour

Tuple à deux éléments contenant le nombre et les identificateurs des interfaces implémentées par l’objet implements .

implements ::get_strong, fonction

Récupère une référence forte à ce pointeur de l’objet winrt ::implements. Consultez Références fortes et faibles en C++/WinRT. Étant donné que get_strong est une fonction membre du modèle de struct winrt ::implements , vous pouvez l’appeler uniquement à partir d’un objet qui dérive directement ou indirectement de winrt ::implements, tel qu’un objet C++/WinRT. Pour plus d’informations sur la dérivation à partir de winrt::implements, et pour obtenir des exemples, consultez Créer des API avec C++/WinRT.

Syntaxe

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

Valeur de retour

Référence forte à l’objet implémentece pointeur.

implements::get_weak, fonction

Récupère une référence faible au pointeur this de l’objet winrt ::implements. Consultez Références fortes et faibles en C++/WinRT. Étant donné que get_weak est une fonction membre du modèle de struct winrt ::implements , vous pouvez l’appeler uniquement à partir d’un objet qui dérive directement ou indirectement de winrt ::implements, tel qu’un objet C++/WinRT. Pour plus d’informations sur la dérivation à partir de winrt::implements, et pour obtenir des exemples, consultez Créer des API avec C++/WinRT.

Syntaxe

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

Valeur de retour

Objet weak_ref représentant une référence faible au pointeur de l’objetimplémente.

implements ::QueryInterface, fonction

Récupère le pointeur vers l’interface implémentée par l’objet implements , identifié par l’identificateur spécifié. Appelle AddRef sur le pointeur qu’il retourne.

Syntaxe

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

Valeur de retour

Nouveau nombre de références. Cette valeur est destinée à être utilisée uniquement à des fins de test.

implements ::Release, fonction

Décrémente le nombre de références pour l’interface par défaut de l’objet implémente .

Syntaxe

unsigned long __stdcall Release() noexcept;

Valeur de retour

Nouveau nombre de références. Cette valeur est destinée à être utilisée uniquement à des fins de test.

implements ::operator Windows ::Foundation ::IInspectable

Convertit l’objet implémente en Windows ::Foundation ::IInspectable. Cet opérateur vous permet de passer l’objet implements à une fonction qui attend un IInspectable.

Syntaxe

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

Valeur de retour

Implémente l’objet converti en windows ::Foundation ::IInspectable.

Voir aussi