winrt::static_lifetime マーカー構造体 (C++/WinRT)

に渡されるマーカー型は、静的な有効期間にオプトインするために(固定するために) アクティブ化ファクトリの基本構造体を実装します。 マーカーの種類の使用例については、「マーカーの種類」 を参照してください

構文

struct winrt::static_lifetime

winrt::static_lifetime の具体的な例を次に示しますMyRuntimeClass のアクティブ化ファクトリをシングルトンにしたい場合は、次のようにピン留めします。

// 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 マーカーを使用して、アクティブ化 ファクトリ オブジェクトに静的イベントを実装する必要 があります。 ファクトリをピン留めして、イベント ハンドラーが追加および削除されると、その有効期間が安定します。 次の例のように、ヘッダーで行うすべての操作を実行できます。

Note

新しい 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 Version 1809)

名前空間: winrt

ヘッダー: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (既定で含まれます)

関連項目