diff options
| author | crupest <crupest@outlook.com> | 2020-05-24 01:40:02 +0800 |
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-05-24 01:40:02 +0800 |
| commit | d86a71f79afe0e4dac768f61d6bff690567aca5b (patch) | |
| tree | 4957e9a64c77680deb07201fbd879bf036616dae /include/cru/common/self_resolvable.hpp | |
| parent | f3a8fd608a9776ef0a5f547da918a32cf6074060 (diff) | |
| download | cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.gz cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.bz2 cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.zip | |
...
Diffstat (limited to 'include/cru/common/self_resolvable.hpp')
| -rw-r--r-- | include/cru/common/self_resolvable.hpp | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/include/cru/common/self_resolvable.hpp b/include/cru/common/self_resolvable.hpp deleted file mode 100644 index 19c06a1b..00000000 --- a/include/cru/common/self_resolvable.hpp +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once -#include "pre_config.hpp" - -#include <memory> -#include <type_traits> - -namespace cru { -template <typename T> -class SelfResolvable; - -template <typename T> -class ObjectResolver { - friend SelfResolvable<T>; - - private: - ObjectResolver(const std::shared_ptr<T*>& resolver) : resolver_(resolver) {} - - public: - ObjectResolver(const ObjectResolver&) = default; - ObjectResolver& operator=(const ObjectResolver&) = default; - ObjectResolver(ObjectResolver&&) = default; - ObjectResolver& operator=(ObjectResolver&&) = default; - ~ObjectResolver() = default; - - T* Resolve() const { - // resolver_ is null only when this has been moved. - // You shouldn't resolve a moved resolver. So assert it. - Expects(resolver_); - return *resolver_; - } - - private: - std::shared_ptr<T*> resolver_; -}; - -template <typename T> -class SelfResolvable { - public: - SelfResolvable() : resolver_(new T*(static_cast<T*>(this))) {} - SelfResolvable(const SelfResolvable&) = delete; - SelfResolvable& operator=(const SelfResolvable&) = delete; - SelfResolvable(SelfResolvable&&) = delete; - SelfResolvable& operator=(SelfResolvable&&) = delete; - virtual ~SelfResolvable() { (*resolver_) = nullptr; } - - ObjectResolver<T> CreateResolver() { return ObjectResolver<T>(resolver_); } - - private: - std::shared_ptr<T*> resolver_; -}; -} // namespace cru |
