自动为自定义异常添加前缀
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;
}
当涉及到 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;
}