滚动我自己的例外

Rob*_*Rob 1 c++ exception

我正在编写一些新代码,它将抛出一个自定义异常 - 我想包含一个错误字符串和一个状态代码.哪个类应该是异常派生的? std::exceptionstd::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_;
};
Run Code Online (Sandbox Code Playgroud)

然后在代码中:

throw MyException("Ooops!", MyException::ERROR_BAR);
Run Code Online (Sandbox Code Playgroud)

Dav*_*olm 8

Boost有一个关于错误和异常处理的伟大文档,它讨论了常见问题以及如何从std :: exception(s)正确继承.


Kon*_*lph 6

考虑状态代码是否真的合适.它通常优于创建异常类的层次结构.这样,调用者可以更好地控制要处理的异常以及如何使界面更简单.

当然,有时状态代码仍然合适(编译器一直使用它们).