-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathany.hpp
More file actions
48 lines (42 loc) · 819 Bytes
/
any.hpp
File metadata and controls
48 lines (42 loc) · 819 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef ANY_H
#define ANY_H
#include "Logger.hpp"
#include <memory>
class Any
{
public:
Any() = default;
~Any() = default;
Any(const Any&) = delete;
Any& operator=(const Any&) = delete;
Any(Any&&) = default;
Any& operator=(Any&&) = default;
template<typename T>
Any(T data):base_(std::make_unique<Derive<T>>(data)){}
//get data
template<typename T>
T cast_()
{
Derive<T> * dp = dynamic_cast<Derive<T>*>(base_.get());
if (dp == nullptr)
{
throw "Type mismatch!";
LOG_ERROR("TYPE MISMATCH!\n");
}
return dp->date_;
}
private:
class Base {
public:
virtual ~Base() = default;
};
template<typename T>
class Derive :public Base {
public:
Derive(T date) :date_(date) {};
T date_;
};
private:
std::unique_ptr<Base> base_;
};
#endif