Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class BaseHolder {
- public:
- virtual ~BaseHolder() {}
- virtual const type_info& type()= 0;
- };
- template<class T>
- class ConcreteHolder : public BaseHolder {
- public:
- T t_;
- explicit ConcreteHolder(const T& t) : t_(t) {}
- const type_info& type() {
- return typeid(T);
- }
- };
- class Any {
- BaseHolder* held_;
- public:
- template<class T>
- Any() : held_(0) {}
- template<class T>
- Any(const T& value) :held_(new ConcreteHolder<T>(value)) {}
- template <class U> U cast() const {
- if (typeid(U).hash_code() != (held_->type()).hash_code()) {
- std::cout << "ERROOOOOOOOOOOOOOOOOOOOOOOR" << std::endl;
- return 0;
- }
- return static_cast<ConcreteHolder<U>*> (held_)->t_;
- }
- ~Any() {
- delete held_;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement