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;
 | 
						|
	};
 | 
						|
} |