From 4710715102df3806479985679bd8048631ccaab5 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 18 Sep 2018 01:38:02 +0800 Subject: I think I can't sleep well after this commit. Still a lot of bugs!!! --- CruUI/builder.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 CruUI/builder.h (limited to 'CruUI/builder.h') 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 + 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; + }; +} -- cgit v1.2.3