class Base: public std::enable_shared_from_this< Base >
{
public:
// typedefs
typedef std::shared_ptr<Base> Ptr;
// methods
void type_check(const std::type_info&) const;
virtual const std::type_info& type_info() const = 0;
virtual std::vector<std::type_index> base_type_info() const = 0;
virtual const void \* addressof() const = 0;
void \* addressof();
virtual Base::Ptr copy() const = 0;
virtual bool equal(const Base& rhs) const = 0;
virtual void print(std::ostream& os) const = 0;
virtual void read(std::istream& os) = 0;
void read_to(Base& other) const;
virtual const DiscreteTypeInfo& get_type_info() const = 0;
virtual std::shared_ptr<RuntimeAttribute> as_runtime_attribute() const;
virtual bool is_copyable() const;
virtual Any init(const std::shared_ptr<Node>& node);
virtual Any merge(const std::vector<std::shared_ptr<Node>>& nodes);
virtual std::string to_string();
virtual bool visit_attributes(AttributeVisitor&);
bool visit_attributes(AttributeVisitor&) const;
std::string to_string() const;
bool is(const std::type_info& other) const;
template <class T>
bool is() const;
template <class T>
T& as();
template <class T>
const T& as() const;
protected:
};