any.h
unknown
c_cpp
2 years ago
944 B
4
Indexable
#pragma once class Any { private: struct InnerBase { virtual ~InnerBase() { } virtual InnerBase *Clone() const = 0; }; template <class T> struct Inner : public InnerBase { explicit Inner(const T &val) : value(val) { } InnerBase *Clone() const override { return new Inner<T>(value); } T value; }; InnerBase *ptr_ = nullptr; public: Any(); template <class T> explicit Any(const T &value) : ptr_(new Inner<T>(value)) { } template <class T> Any &operator=(const T &value) { delete ptr_; ptr_ = new Inner<T>(value); return *this; } Any(const Any &rhs); Any &operator=(Any rhs); ~Any(); bool Empty() const; void Clear(); void Swap(Any &rhs); template <class T> const T &GetValue() const { return dynamic_cast<Inner<T> &>(*ptr_).value; } };
Editor is loading...