winrt:: static_lifetime 標記結構 (c + +/WinRT)

標記類型,它會傳遞至啟用 factory 的 實底結構,以便 將其加入至靜態存留期 (將其 選) 。 如需標記類型的使用範例,請參閱 標記類型

語法

struct winrt::static_lifetime

範例

以下是 winrt:: static_lifetime的特定範例。 如果您想要讓 MyRuntimeClass 的啟用 factory 成為 singleton,請將其釘選為這樣。

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

您應該使用 winrt:: static_lifetime 標記,在您的啟用 factory 物件上執行靜態事件。 您可以釘選處理站,以確保其存留期穩定,因為新增和移除事件處理常式。 您可以在標頭中這麼做,例如在下一個範例中。

注意

從專案範本 (新的 c + +/WinRT 專案) 預設會使用 元件優化 。 如果您 是使用元件優化,則可以省略指定清單的部分。

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

需求

最低支援 SDK: Windows SDK 版本 10.0.17763.0 (Windows 10 版本 1809)

命名空間: winrt

標頭: % WindowsSdkDir% Include < 預設包含 WindowsTargetPlatformVersion > \cppwinrt\winrt\base.h ()

另請參閱