Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jenis penanda, yang diteruskan ke struct dasar implementasi pabrik aktivasi untuk memilihnya ke masa pakai statis (untuk menyematkannya ). Untuk contoh penggunaan jenis penanda, lihat Jenis penanda.
Sintaks
struct winrt::static_lifetime
Contoh
Berikut adalah contoh spesifik winrt::static_lifetime. Jika Anda ingin pabrik aktivasi untuk MyRuntimeClass menjadi singleton, maka sematkan seperti ini.
// 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>
{
};
}
Anda harus menerapkan peristiwa statis pada objek pabrik aktivasi Anda menggunakan penanda winrt::static_lifetime . Anda menyematkan pabrik untuk memastikan bahwa masa pakainya stabil saat penanganan aktivitas ditambahkan dan dihapus. Anda dapat melakukan semua itu di header seperti dalam contoh berikutnya.
Catatan
Proyek C++/WinRT baru (dari templat proyek) akan menggunakan pengoptimalan komponen secara default. Jika Anda tidak menggunakan pengoptimalan komponen, maka Anda dapat menghilangkan bagian dari daftar yang ditunjukkan.
// 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);
}
};
}
Persyaratan
SDK minimum yang didukung: Windows SDK versi 10.0.17763.0 (Windows 10, versi 1809)
Namespace: winrt
Header: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h (disertakan secara default)