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

Automatically add prefix to custom exception

当涉及到 C++ std:exception 处理时,我很不确定。这是我在网上找到的一些示例代码,我目前正在使用。

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" 时,我想在其前面加上: "Derived Exception Raised: "

当 MyBaseException 收到 MyDerivedException 异常时,我想在它前面添加: "Base Exception Raised: "

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

"Base Exception Raised: Derived Exception Raised: original_exception_message"

我总觉得我会收到关于这个问题的各种令人讨厌的回复,关于糟糕的概念和糟糕的做法......但我并不声称自己是专家。

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

提前致谢。

#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;
}

并阅读此 link http://en.cppreference.com/w/cpp/error/exception