自动为自定义异常添加前缀

时间:2016-07-15 15:14:34

标签: c++ string exception prepend

对于C ++ std:异常处理,我非常不满意。这是我在网上找到的一些示例代码,我目前正在使用它。

class MyBaseException : public std::exception
{
  public:

  explicit MyBaseException(const std::string & message)
     : m_Base(message.c_cstr()) {}

  explicit MyBaseException(const char *message)
     : m_Base(message) {}

  virtual ~MyBaseException() throw () {}

protected:
  typedef std::exception m_Base;
};

class MyDerivedException : public MyBaseException
{
  public:

  explicit MyDerivedException (const std::string & message)
     : m_Base(message.c_cstr()) {}

  explicit MyDerivedException (const char *message)
     : m_Base(message) {}

  virtual ~MyDerivedException () throw () {}

protected:
  typedef MyBaseException m_Base;
};

现在,我想做的是自动添加以下方案引发的每个异常。

某些代码使用以下内容引发MyDerivedException异常: “original_exception_message”

当MyDerivedException收到“original_exception_message”时,我想在它前面添加: “衍生的异常提升:”

当MyBaseException收到MyDerivedException异常时,我想在它前面添加: “基本例外提出:”

这样最终的消息将如下所示:

“基本异常引发:派生的异常引发:original_exception_message”

我觉得我会在这方面得到各种令人讨厌的回复,关于不良概念和不良做法......但我并不认为自己是专家。

请注意,前置消息实际上并非如此。他们会提供更多信息。

提前致谢。

1 个答案:

答案 0 :(得分:1)

#include <iostream>
#include <exception>

class MyBaseException : public std::exception
{
public:    
  explicit MyBaseException(const std::string & message)
     : m_message("Base Exception Raised: " + message) {}

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

private:
  const std::string m_message;
};

class MyDerivedException : public MyBaseException
{
public:

  explicit MyDerivedException (const std::string& message)
     : MyBaseException("Derived Exception Raised: " + message) {}

};

int main()
{
    try
    {
        throw MyDerivedException("derived");
    }
    catch(std::exception const& e)
    {
        std::cout << e.what();
    }
    return 0;
}

请阅读此链接http://en.cppreference.com/w/cpp/error/exception