对于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”
我觉得我会在这方面得到各种令人讨厌的回复,关于不良概念和不良做法......但我并不认为自己是专家。
请注意,前置消息实际上并非如此。他们会提供更多信息。
提前致谢。
答案 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;
}