Partager via


WinRT :: static_lifetime, struct (C++/WinRT)

Un type de marqueur, qui est passé au struct Implements de base d’une fabrique d’activation afin de l’accepter dans une durée de vie statique (pour l' épingler ). Pour obtenir un exemple d’utilisation de types de marqueur, consultez types de marqueurs.

Syntaxe

struct winrt::static_lifetime

Exemples

Voici un exemple spécifique de WinRT :: static_lifetime. Si vous souhaitez que la fabrique d’activation pour MyRuntimeClass soit un singleton, épinglez-la comme ceci.

// MyRuntimeclass.h
#pragma once

#include "MyRuntimeClass.g.h"

namespace winrt::MYNAMESPACE::implementation
{
    struct MyRuntimeClass : MyRuntimeClassT<MyRuntimeClass> { ... };
}

namespace winrt::MYNAMESPACE::factory_implementation
{
    struct MyRuntimeClass : MyRuntimeClassT<MyRuntimeClass, implementation::MyRuntimeClass, static_lifetime>
    {
    };
}

Vous devez implémenter des événements statiques sur votre objet de fabrique d’activation à l’aide du marqueur WinRT :: static_lifetime . Vous épinglez la fabrique pour vous assurer que sa durée de vie est stable lors de l’ajout et de la suppression de gestionnaires d’événements. Vous pouvez effectuer toutes ces actions dans un en-tête comme dans l’exemple suivant.

Notes

Un nouveau projet C++/WinRT (à partir d’un modèle de projet) utilise des optimisations de composants par défaut. Si vous n’utilisez pas d’optimisations de composants, vous pouvez omettre la partie de la liste indiquée.

// MyRuntimeClass.h
#pragma once

#include "MyRuntimeClass.g.h"

// Forward-declare the instance class.
namespace winrt::Component::implementation
{
    struct MyRuntimeClass;
}

// Then define the activation factory class before the instance class.
namespace winrt::Component::factory_implementation
{
    struct MyRuntimeClass : MyRuntimeClassT<MyRuntimeClass, implementation::MyRuntimeClass, static_lifetime>
    {
        winrt::event_token MyRuntimeClassEvent(Windows::Foundation::EventHandler<int32_t> const& handler)
        {
            return m_static.add(handler);
        }

        void MyRuntimeClassEvent(winrt::event_token const& cookie)
        {
            m_static.remove(cookie);
        }

        void RaiseMyRuntimeClassStaticEvent(int32_t value)
        {
            m_static(nullptr, value);
        }

        event<Windows::Foundation::EventHandler<int32_t>> m_static;
    };
}

namespace winrt::Component::implementation
{
    struct MyRuntimeClass
    {
        MyRuntimeClass() = delete;

        // If you're not using component optimizations, then you can omit these next three methods.

        // Component optimizations means that you have to implement any statics on the instance class,
        // and have those forward to the activation factory. You will see build errors if you don't do this.

        static winrt::event_token MyRuntimeClassStaticEvent(Windows::Foundation::EventHandler<int32_t> const& handler)
        {
            return make_self<factory_implementation::MyRuntimeClass>()->MyRuntimeClassStaticEvent(handler);
        }

        static void MyRuntimeClassStaticEvent(winrt::event_token const& cookie)
        {
            return make_self<factory_implementation::MyRuntimeClass>()->MyRuntimeClassStaticEvent(cookie);
        }

        static void RaiseMyRuntimeClassStaticEvent(int32_t value)
        {
            return make_self<factory_implementation::MyRuntimeClass>()->RaiseMyRuntimeClassStaticEvent(value);
        }
    };
}

Spécifications

kit de développement logiciel (SDK) minimal pris en charge : SDK Windows version 10.0.17763.0 (Windows 10, version 1809)

Espace de noms : WinRT

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

Voir aussi