#pragma once #include #include #include namespace json { class Json; typedef std::shared_ptr spJson; class Json { public: Json() {} virtual ~Json() {} virtual bool is_object() const { return false; } virtual bool is_array() const { return false; } virtual bool is_real() const { return false; } virtual bool is_integral() const { return false; } virtual bool is_boolean() const { return false; } virtual bool is_null() const { return false; } template T& as(); template const T& as() const; virtual operator std::string() const = 0; }; template T& Json::as() { return *dynamic_cast(this); } template const T& Json::as() const { return *dynamic_cast(this); } }