From 04d243699cbde40fe69472f4c4df38c36f7942ef Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 18 Nov 2025 17:31:23 +0800 Subject: Move delete later to platform::gui. --- include/cru/platform/gui/DeleteLater.h | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 include/cru/platform/gui/DeleteLater.h (limited to 'include/cru/platform/gui/DeleteLater.h') diff --git a/include/cru/platform/gui/DeleteLater.h b/include/cru/platform/gui/DeleteLater.h new file mode 100644 index 00000000..c0578974 --- /dev/null +++ b/include/cru/platform/gui/DeleteLater.h @@ -0,0 +1,41 @@ +#pragma once +#include "UiApplication.h" + +#include +#include +#include + +namespace cru::platform::gui { +template +class DeleteLaterImpl { + CRU_DEFINE_CLASS_LOG_TAG("cru::platform::gui::DeleteLaterImpl") + + public: + virtual ~DeleteLaterImpl() {} + + void DeleteLater() { + IUiApplication::GetInstance()->DeleteLater(static_cast(this)); + } +}; + +namespace details { +template +struct DeleteLaterPtrDeleter { + void operator()(T* p) const noexcept { p->DeleteLater(); } +}; +} // namespace details + +template +using DeleteLaterPtr = std::unique_ptr>; + +template +DeleteLaterPtr ToDeleteLaterPtr(std::unique_ptr&& p) { + return DeleteLaterPtr(p.release()); +} + +template +DeleteLaterPtr MakeDeleteLater(Args&&... args) { + return DeleteLaterPtr(new T(std::forward(args)...)); +} + +} // namespace cru::platform::gui -- cgit v1.2.3