现代C++:异常捕获

/**
 * 异常捕获类
 */
class exception_debug : public std::exception
{
private:
	std::string m_message;				// 异常信息
	int m_lineno;						// 异常所在行
	std::string m_function_name;		// 异常所在函数名称
	std::string m_file_name;			// 异常文件名
	std::string m_what_msg;				// 存储上述异常信息

public:
	exception_debug(std::string message = "", int lineno = 0, 
		std::string function_name = "",
		std::string file_name = "") :
		m_message{ message }, m_lineno{ lineno },
		m_function_name{ function_name }, m_file_name{ file_name }
	{
		std::ostringstream os;

		os << "exception_debug - file [" << this->m_file_name << "]\n";
		os << "thread id [" << std::this_thread::get_id() << "] - ";
		os << "line number [" << this->m_lineno << "] - ";
		os << "function [" << this->m_function_name << "]\n";
		os << "message: " << this->m_message;

		this->m_what_msg = os.str();
	}

	// 重写异常what虚函数
	virtual const char* what() const noexcept override
	{
		return this->m_what_msg.c_str();
	}
};

// 
#define Hfv_ThrowException(message) throw exception_debug(message,__LINE__,__FUNCTION_NAME__,__FILE__);

/**
 * 测试除法 b = 0引起的异常
 */
int division(int a, int b)
{
	if (b == 0)
	{
		Hfv_ThrowException("b is zero");
	}

	return a / b;
}

void example_for_throw_exception()
{
	try
	{
		division(5, 0);
		std::cout << "Successfully!" << std::endl;
	}
	catch (const std::exception& e)
	{
		std::cout << e.what() << std::endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值