46 lines
		
	
	
		
			854 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			854 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| #include <sstream>
 | |
| #include <iostream>
 | |
| 
 | |
| namespace c11log
 | |
| {
 | |
| 	class log_exception :public std::exception
 | |
| 	{
 | |
| 	public:
 | |
| 		log_exception() : _oss(), _msg()
 | |
| 		{}
 | |
| 
 | |
| 		virtual ~log_exception()
 | |
| 		{}
 | |
| 
 | |
| 		explicit log_exception(const std::string& msg) :_oss(msg, std::ostringstream::ate), _msg(msg)
 | |
| 		{}
 | |
| 
 | |
| 		log_exception(const log_exception &other) :_oss(other._oss.str()), _msg(other._msg)
 | |
| 		{}
 | |
| 
 | |
| 		log_exception& operator=(const log_exception& other)
 | |
| 		{
 | |
| 			_oss.str(other._oss.str());
 | |
| 			_msg = other._msg;
 | |
| 			return *this;
 | |
| 		}
 | |
| 
 | |
| 		virtual const char* what() const throw () override
 | |
| 		{
 | |
| 			return _msg.c_str();
 | |
| 		}
 | |
| 
 | |
| 		template<typename T>
 | |
| 		log_exception& operator<<(const T& what)
 | |
| 		{
 | |
| 			_oss << what;
 | |
| 			_msg = _oss.str();
 | |
| 			return *this;
 | |
| 		}
 | |
| 
 | |
| 	private:
 | |
| 		std::ostringstream _oss;
 | |
| 		std::string _msg;
 | |
| 	};
 | |
| } |