当前位置:  开发笔记 > 编程语言 > 正文

滚动我自己的例外

如何解决《滚动我自己的例外》经验,为你挑选了2个好方法。

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

然后在代码中:

throw MyException("Ooops!", MyException::ERROR_BAR);

David Holm.. 8

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



1> David Holm..:

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



2> Konrad Rudol..:

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

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

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有