我正在编写一些新代码,它将抛出一个自定义异常 - 我想包含一个错误字符串和一个状态代码.哪个类应该是异常派生的? std::exception
?std::runtime_error
?还有其他'陷阱'需要担心吗?我在考虑以下内容:
class MyException : public std::exception(?) { public: enum Status { ERROR_FOO, ERROR_BAR, ... }; MyException(const std::string& error, Status code) : error_(error), code_(code) { ... } virtual const char* what() const { return error_.c_str(); } Status code() const { return code_; } private: std::string error_; Status code_; };
然后在代码中:
throw MyException("Ooops!", MyException::ERROR_BAR);
David Holm.. 8
Boost有一个关于错误和异常处理的伟大文档,它讨论了常见问题以及如何从std :: exception(s)正确继承.
Boost有一个关于错误和异常处理的伟大文档,它讨论了常见问题以及如何从std :: exception(s)正确继承.
考虑状态代码是否真的合适.它通常优于创建异常类的层次结构.这样,调用者可以更好地控制要处理的异常以及如何使界面更简单.
当然,有时状态代码仍然合适(编译器一直使用它们).