diff options
Diffstat (limited to 'CruUI/builder.h')
-rw-r--r-- | CruUI/builder.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/CruUI/builder.h b/CruUI/builder.h new file mode 100644 index 00000000..3ae8724e --- /dev/null +++ b/CruUI/builder.h @@ -0,0 +1,42 @@ +#pragma once + +#include "base.h" + +namespace cru +{ + template<typename T> + class OneTimeBuilder : public Object + { + protected: + OneTimeBuilder() = default; + + public: + OneTimeBuilder(const OneTimeBuilder& other) = delete; + OneTimeBuilder(OneTimeBuilder&& other) = delete; + OneTimeBuilder& operator=(const OneTimeBuilder& other) = delete; + OneTimeBuilder& operator=(OneTimeBuilder&& other) = delete; + virtual ~OneTimeBuilder() = default; + + T* Create() + { + if (is_valid_) + { + is_valid_ = false; + return OnCreate(); + } + else + throw std::runtime_error("OneTimeBuilder is invalid."); + } + + bool IsValid() const + { + return is_valid_; + } + + protected: + virtual T* OnCreate() = 0; + + private: + bool is_valid_ = true; + }; +} |