【问题标题】:Defining own exception class in C++在 C++ 中定义自己的异常类
【发布时间】:2014-06-10 08:42:55
【问题描述】:

我试图弄清楚如何为允许添加错误特定文本字符串的 C++ 异常实现我自己的基类。我认为 std::c++ 异常不可能更改错误文本,即使在 C++11 中也不可能:http://www.cplusplus.com/reference/exception/exception/。 我还想从我的 Exception 基类中派生出更具体的异常。我阅读了很多文章,但我仍然不确定我的以下实现是否涵盖了所有重要方面。

class Exception : public std::exception {      
    public:
        Exception(const char* message) : m(message) {

        }

        virtual ~Exception() throw() {

        }

        virtual const char* what() const throw() {
            return m.c_str();
        }

    protected:
        std::string m;

    private:
        Exception();
    };

这个实现好吗?

【问题讨论】:

标签: c++ exception c++11


【解决方案1】:

如果您从 runtime_error 派生(并且您的编译器支持继承构造函数),您可以将您的类压缩为

struct Exception : public std::runtime_error
{
  using runtime_error::runtime_error;
};

throw():异常规范自 C++11 起已弃用,请改用 noexcept

【讨论】:

  • 如果你想不时抛出logic_error怎么办?
  • 我的观点是,对于问题所要求的通用异常基类,建议从std::runtime_error 派生似乎很奇怪,它仅代表可能错误情况的一小部分。这可能会使稍后在用户端编写合理的catch 语句变得复杂。
猜你喜欢
  • 2021-08-24
  • 2010-10-15
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 2017-01-05
  • 2017-06-04
相关资源
最近更新 更多