Ich bin ziemlich unsicher, wenn es um C++ std: Ausnahmebehandlung geht. Hier ist ein Beispielcode, den ich im Internet gefunden habe, den ich derzeit verwende.Automatisch Präfix zu benutzerdefinierten Ausnahme hinzufügen
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;
};
Nun, was ich möchte ist zu tun, um automatisch prepend mit dem folgenden Schema alle Ausnahmen angehoben.
Einige Code wirft eine MyDerivedException Ausnahme mit dem folgenden: "original_exception_message"
Wenn die MyDerivedException empfängt "original_exception_message", ich möchte es vorangestellt mit: "Abgeleitet Ausnahme ausgelöst:"
und wenn MyBaseException die MyDerivedException Ausnahme empfängt, würde Ich mag es vorangestellt mit: „Basis-Exception ausgelöst:“
Derart, dass die letzte Botschaft würde wie folgt aussehen:
„Basis-Exception ausgelöst: Abgeleitet Ausnahme ausgelöst: original_exception_message“
Ich muss das Gefühl ich alle möglichen bösen Antworten auf diese, über schlechte Konzepte und schlechte Praktiken bekommen werde ... Aber ich weiß nicht behaupten, ein Experte zu sein.
Beachten Sie, dass die Prepend-Nachrichten nicht das sind. Sie wären ein wenig informativer.
Vielen Dank im Voraus.
„Ich muss das Gefühl, ich werde alle möglichen bösen Antworten auf diese bekommen, über schlechte Konzepte und schlechte Praktiken“ Sie wissen, dass diese C++ Gemeinschaft zu gut :-) . Gute Fragen bekommen jedoch gute Antworten! – AndyG
Fehle ich etwas oder deklarierst du den gleichen Konstruktor zweimal? ('const char * message') – lcs
Sie haben doppelte Konstruktoren - der obige Code kann nicht kompiliert werden. –