#pragma once #include "Base.h" #include #include #include namespace cru::ui { class CRU_UI_API DeleteLaterImpl { CRU_DEFINE_CLASS_LOG_TAG("cru::ui::DeleteLaterImpl") public: DeleteLaterImpl(); virtual ~DeleteLaterImpl(); void DeleteLater(); private: bool delete_later_scheduled_; }; 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::ui