diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-11-18 17:31:23 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-11-18 17:31:23 +0800 |
| commit | 04d243699cbde40fe69472f4c4df38c36f7942ef (patch) | |
| tree | af2a2031ab7f2d9ce03cf677eba066e11f32a0c9 /include/cru/platform/gui/DeleteLater.h | |
| parent | 358dc1498623d53f1d8bedf5172743deb6c03811 (diff) | |
| download | cru-04d243699cbde40fe69472f4c4df38c36f7942ef.tar.gz cru-04d243699cbde40fe69472f4c4df38c36f7942ef.tar.bz2 cru-04d243699cbde40fe69472f4c4df38c36f7942ef.zip | |
Move delete later to platform::gui.
Diffstat (limited to 'include/cru/platform/gui/DeleteLater.h')
| -rw-r--r-- | include/cru/platform/gui/DeleteLater.h | 41 |
1 files changed, 41 insertions, 0 deletions
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 <cru/base/Guard.h> +#include <memory> +#include <utility> + +namespace cru::platform::gui { +template <typename TSelf> +class DeleteLaterImpl { + CRU_DEFINE_CLASS_LOG_TAG("cru::platform::gui::DeleteLaterImpl") + + public: + virtual ~DeleteLaterImpl() {} + + void DeleteLater() { + IUiApplication::GetInstance()->DeleteLater(static_cast<TSelf*>(this)); + } +}; + +namespace details { +template <typename T> +struct DeleteLaterPtrDeleter { + void operator()(T* p) const noexcept { p->DeleteLater(); } +}; +} // namespace details + +template <typename T> +using DeleteLaterPtr = std::unique_ptr<T, details::DeleteLaterPtrDeleter<T>>; + +template <typename T> +DeleteLaterPtr<T> ToDeleteLaterPtr(std::unique_ptr<T>&& p) { + return DeleteLaterPtr<T>(p.release()); +} + +template <typename T, typename... Args> +DeleteLaterPtr<T> MakeDeleteLater(Args&&... args) { + return DeleteLaterPtr<T>(new T(std::forward<Args>(args)...)); +} + +} // namespace cru::platform::gui |
