diff options
author | crupest <crupest@outlook.com> | 2023-12-30 01:43:18 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-12-30 14:11:23 +0800 |
commit | c4641cadc0070b38f4efec740023a9300a7602d1 (patch) | |
tree | e9bb34d284445923217bea479ee4bc5a4a78b029 /include/cru/common/SelfResolvable.h | |
parent | f7a40005ec854131629acac8d03aed0e8a5da415 (diff) | |
download | cru-c4641cadc0070b38f4efec740023a9300a7602d1.tar.gz cru-c4641cadc0070b38f4efec740023a9300a7602d1.tar.bz2 cru-c4641cadc0070b38f4efec740023a9300a7602d1.zip |
Fix bugs and write unit tests for SelfResolvable.
Diffstat (limited to 'include/cru/common/SelfResolvable.h')
-rw-r--r-- | include/cru/common/SelfResolvable.h | 11 |
1 files changed, 6 insertions, 5 deletions
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 <typename T> class SelfResolvable { public: - SelfResolvable() : resolver_(static_cast<T*>(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; } @@ -72,6 +70,9 @@ class SelfResolvable { ObjectResolver<T> CreateResolver() { return resolver_; } private: + T* CastToSubClass() { return static_cast<T*>(this); } + + private: ObjectResolver<T> resolver_; }; } // namespace cru |