aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/util/Private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/util/Private.h')
-rw-r--r--src/crepe/util/Private.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/crepe/util/Private.h b/src/crepe/util/Private.h
new file mode 100644
index 0000000..6dd28bb
--- /dev/null
+++ b/src/crepe/util/Private.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <typeindex>
+#include <functional>
+
+namespace crepe {
+
+class Private {
+public:
+ Private() = default;
+ ~Private();
+ Private(const Private &);
+ Private(Private &&);
+ Private & operator=(const Private &);
+ Private & operator=(Private &&);
+
+ template <typename T>
+ T & get();
+
+ template <typename T, typename... Args>
+ T & set(Args &&... args);
+
+ bool empty() const noexcept;
+
+private:
+ std::function<void(void *)> destructor;
+ std::type_index type = typeid(void);
+ void * instance = nullptr;
+};
+
+}
+
+#include "Private.hpp"
+