/**
* 异常捕获类
*/
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;
}
}
现代C++:异常捕获
最新推荐文章于 2024-07-01 01:09:09 发布