Я довольно сомнительный, когда дело доходит до 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»
Я чувствую, что получу всевозможные неприятные ответы об этом, о плохих концепциях и плохих практиках … Но я не претендую на звание эксперта.
Обратите внимание, что сообщения prepend на самом деле не такие. Они были бы немного более информативными.
Заранее спасибо.
#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
Других решений пока нет …