move type_name outside of basic_json, make it a friend
This commit is contained in:
		
							parent
							
								
									d359684f2b
								
							
						
					
					
						commit
						c833b22b7b
					
				
					 2 changed files with 46 additions and 40 deletions
				
			
		
							
								
								
									
										43
									
								
								src/json.hpp
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								src/json.hpp
									
										
									
									
									
								
							|  | @ -181,6 +181,27 @@ using is_unscoped_enum = | |||
| 
 | ||||
| namespace detail | ||||
| { | ||||
| template <typename Json> std::string type_name(Json const &j) | ||||
| { | ||||
|   switch (j.m_type) | ||||
|   { | ||||
|   case value_t::null: | ||||
|     return "null"; | ||||
|   case value_t::object: | ||||
|     return "object"; | ||||
|   case value_t::array: | ||||
|     return "array"; | ||||
|   case value_t::string: | ||||
|     return "string"; | ||||
|   case value_t::boolean: | ||||
|     return "boolean"; | ||||
|   case value_t::discarded: | ||||
|     return "discarded"; | ||||
|   default: | ||||
|     return "number"; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // very useful construct against boilerplate (more boilerplate needed than in
 | ||||
| // C++17: http://en.cppreference.com/w/cpp/types/void_t)
 | ||||
| template <typename...> struct make_void | ||||
|  | @ -585,6 +606,7 @@ template < | |||
| class basic_json | ||||
| { | ||||
|   private: | ||||
|     template <typename Json> friend std::string detail::type_name(Json const &); | ||||
|     /// workaround type for MSVC
 | ||||
|     using basic_json_t = basic_json<ObjectType, ArrayType, StringType, | ||||
|           BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, | ||||
|  | @ -8129,26 +8151,7 @@ class basic_json | |||
| 
 | ||||
|     @since version 1.0.0 | ||||
|     */ | ||||
|     std::string type_name() const | ||||
|     { | ||||
|         switch (m_type) | ||||
|         { | ||||
|             case value_t::null: | ||||
|                 return "null"; | ||||
|             case value_t::object: | ||||
|                 return "object"; | ||||
|             case value_t::array: | ||||
|                 return "array"; | ||||
|             case value_t::string: | ||||
|                 return "string"; | ||||
|             case value_t::boolean: | ||||
|                 return "boolean"; | ||||
|             case value_t::discarded: | ||||
|                 return "discarded"; | ||||
|             default: | ||||
|                 return "number"; | ||||
|         } | ||||
|     } | ||||
|     std::string type_name() const { return detail::type_name(*this); } | ||||
| 
 | ||||
|   private: | ||||
|     /*!
 | ||||
|  |  | |||
|  | @ -181,6 +181,27 @@ using is_unscoped_enum = | |||
| 
 | ||||
| namespace detail | ||||
| { | ||||
| template <typename Json> std::string type_name(Json const &j) | ||||
| { | ||||
|   switch (j.m_type) | ||||
|   { | ||||
|   case value_t::null: | ||||
|     return "null"; | ||||
|   case value_t::object: | ||||
|     return "object"; | ||||
|   case value_t::array: | ||||
|     return "array"; | ||||
|   case value_t::string: | ||||
|     return "string"; | ||||
|   case value_t::boolean: | ||||
|     return "boolean"; | ||||
|   case value_t::discarded: | ||||
|     return "discarded"; | ||||
|   default: | ||||
|     return "number"; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // very useful construct against boilerplate (more boilerplate needed than in | ||||
| // C++17: http://en.cppreference.com/w/cpp/types/void_t) | ||||
| template <typename...> struct make_void | ||||
|  | @ -586,6 +607,7 @@ template < | |||
| class basic_json | ||||
| { | ||||
|   private: | ||||
|     template <typename Json> friend std::string detail::type_name(Json const &); | ||||
|     /// workaround type for MSVC | ||||
|     using basic_json_t = basic_json<ObjectType, ArrayType, StringType, | ||||
|           BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, | ||||
|  | @ -8127,26 +8149,7 @@ class basic_json | |||
| 
 | ||||
|     @since version 1.0.0 | ||||
|     */ | ||||
|     std::string type_name() const | ||||
|     { | ||||
|         switch (m_type) | ||||
|         { | ||||
|             case value_t::null: | ||||
|                 return "null"; | ||||
|             case value_t::object: | ||||
|                 return "object"; | ||||
|             case value_t::array: | ||||
|                 return "array"; | ||||
|             case value_t::string: | ||||
|                 return "string"; | ||||
|             case value_t::boolean: | ||||
|                 return "boolean"; | ||||
|             case value_t::discarded: | ||||
|                 return "discarded"; | ||||
|             default: | ||||
|                 return "number"; | ||||
|         } | ||||
|     } | ||||
|     std::string type_name() const { return detail::type_name(*this); } | ||||
| 
 | ||||
|   private: | ||||
|     /*! | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue