From c9f31440d65a867e2316e9a19ee3f5db2d0e53a7 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Mon, 17 Nov 2025 13:31:04 +0800 Subject: Revert removing SelfResolvable. --- include/cru/base/Event.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'include/cru/base/Event.h') diff --git a/include/cru/base/Event.h b/include/cru/base/Event.h index c26bea83..0bf54475 100644 --- a/include/cru/base/Event.h +++ b/include/cru/base/Event.h @@ -1,5 +1,6 @@ #pragma once #include "Base.h" +#include "SelfResolvable.h" #include #include @@ -11,7 +12,7 @@ namespace cru { class EventHandlerRevoker; -class EventBase : public Object { +class EventBase : public Object, public SelfResolvable { friend EventHandlerRevoker; public: @@ -34,23 +35,28 @@ class EventHandlerRevoker { friend EventBase; private: - EventHandlerRevoker(EventBase* event, EventBase::EventHandlerToken token) - : event_(event), token_(token) {} + EventHandlerRevoker(ObjectResolver&& resolver, + EventBase::EventHandlerToken token) + : resolver_(std::move(resolver)), token_(token) {} public: /** * Revoke the registered handler. If the event has already been destroyed or * the handler is already revoked, nothing will be done. */ - void operator()() const { event_->RemoveHandler(token_); } + void operator()() const { + if (const auto event = resolver_.Resolve()) { + event->RemoveHandler(token_); + } + } private: - EventBase* event_; + ObjectResolver resolver_; EventBase::EventHandlerToken token_; }; inline EventHandlerRevoker EventBase::CreateRevoker(EventHandlerToken token) { - return EventHandlerRevoker(this, token); + return EventHandlerRevoker(CreateResolver(), token); } struct IBaseEvent : public virtual Interface { -- cgit v1.2.3