std::system_error
处理带有关联错误代码的异常。是否可以使用公共catch块获取std::system_error异常消息及其代码?像这样
try{
// code generating exception
} catch (const std::exception& ex){ // catch all std::exception based exceptions
logger.log() << ex.what(); // get message and error code
// if exception type is system_error
}
唯一的方法是直接捕获std::system_error
类型并在基本异常类型捕获之前获取其代码吗?广泛使用std::system_error的最佳方法是什么?
发布于 2014-05-14 11:44:18
广泛使用std::system_error的最佳方法是什么?
在我看来,最好的办法就是直接抓住例外。
catch (const std::system_error& e) {
std::cout << e.what() << '\n';
std::cout << e.code() << '\n';
} catch (const std::exception& e) {
std::cout << e.what() << '\n';
}
唯一的方法是直接捕获std::system_error类型并在基本异常类型捕获之前获取其代码吗?
严格来说这不是唯一的办法。这是显而易见且惯用的方式。您可以使用dynamic_cast
。
catch (const std::exception& e) {
std::cout << e.what() << '\n';
auto se = dynamic_cast<const std::system_error*>(&e);
if(se != nullptr)
std::cout << se->code() << '\n';
}
但您在评论中提到,您不喜欢使用dynamic_cast
。这也是可以避免的,但不能以任何方式有任何好处。
注意,即使你可以以不明显的方式做事情,但这并不意味着你应该这样做。
https://stackoverflow.com/questions/23651613
复制相似问题