From c4641cadc0070b38f4efec740023a9300a7602d1 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 30 Dec 2023 01:43:18 +0800 Subject: Fix bugs and write unit tests for SelfResolvable. --- include/cru/common/SelfResolvable.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/cru/common/SelfResolvable.h b/include/cru/common/SelfResolvable.h index 5a609340..c0ca9326 100644 --- a/include/cru/common/SelfResolvable.h +++ b/include/cru/common/SelfResolvable.h @@ -28,8 +28,6 @@ class ObjectResolver { return *this->shared_object_ptr_; } - explicit operator bool() const { return this->IsValid(); } - private: void SetResolvedObject(T* o) { assert(IsValid()); @@ -43,14 +41,14 @@ class ObjectResolver { template class SelfResolvable { public: - SelfResolvable() : resolver_(static_cast(this)) {} + SelfResolvable() : resolver_(CastToSubClass()) {} SelfResolvable(const SelfResolvable&) = delete; SelfResolvable& operator=(const SelfResolvable&) = delete; // Resolvers to old object will resolve to new object. SelfResolvable(SelfResolvable&& other) : resolver_(std::move(other.resolver_)) { - this->resolver_.SetResolvedObject(this); + this->resolver_.SetResolvedObject(CastToSubClass()); } // Old resolvers for this object will resolve to nullptr. @@ -58,7 +56,7 @@ class SelfResolvable { SelfResolvable& operator=(SelfResolvable&& other) { if (this != &other) { this->resolver_ = std::move(other.resolver_); - this->resolver_.SetResolvedObject(this); + this->resolver_.SetResolvedObject(CastToSubClass()); } return *this; } @@ -71,6 +69,9 @@ class SelfResolvable { ObjectResolver CreateResolver() { return resolver_; } + private: + T* CastToSubClass() { return static_cast(this); } + private: ObjectResolver resolver_; }; -- cgit v1.2.3