Share via


estructura de marcador winrt::static_lifetime (C++/WinRT)

Un tipo de marcador, que se pasa a la estructura base de un generador de activación para optar por la duración estática (para anclarla ). Para obtener un ejemplo de uso de tipos de marcador, vea Tipos de marcador.

Sintaxis

struct winrt::static_lifetime

Ejemplos

Este es un ejemplo específico de winrt::static_lifetime. Si quiere que la factoría de activación de MyRuntimeClass sea singleton, anclarla de esta forma.

// 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>
    {
    };
}

Debe implementar eventos estáticos en el objeto de generador de activación mediante el marcador winrt::static_lifetime . Anclar el generador para asegurarse de que su duración es estable a medida que se agregan y quitan controladores de eventos. Puede hacer todo eso en un encabezado como en este ejemplo siguiente.

Nota

Un nuevo proyecto de C++/WinRT (de una plantilla de proyecto) usará las optimizaciones de componentes de forma predeterminada. Si no usa optimizaciones de componentes, puede omitir la parte de la lista indicada.

// 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);
        }
    };
}

Requisitos

SDK mínimo admitido: Windows SDK versión 10.0.17763.0 (Windows 10, versión 1809)

Espacio de nombres: winrt

Encabezado: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (incluido de forma predeterminada)

Consulte también