Einfache, aber effektive Fehlerbehandlung für eingene Klassen



  • Wenn man ein paar Klassen hat, bei denen man eine kleine Fehlerbehandlung einbauen will, wie sollte man da am besten vorgehen? Ich habe jetzt die Rückgabewerte gewisser Funktionen überprüft und werfe im Fehlerfall eine std::exception. Was mich daran stört: Der Code für die Fehlerbehandlung macht fast die ganze Klasse aus! Vorallem die Eigenheit von std::string! 😡

    Die Windows-Funktion GetLastError() gibt z.B. einen Fehlercode zurück. Wenn ich jetzt z.B. überprüfen will, ob ich eine Datei lesen kann, sieht meine Fehlerbehandlung ungefähr so aus:

    // Aus dem Kopf niedergeschrieben, bitte als Pseudocode betrachten
    if(!handle)
    {
        std::stringstream err = "Kann Datei nicht öffnen: "
        err << Filename.c_str();
        err << "GetLastError(): ";
        err << GetLastError();
        std::string tmp = err.string();
        throw std::exception(tmp.c_str());
    }
    

    Ziemlich viel Aufwand, nur um zu sehen, ob das Laden geklappt hat! Und den Dateinamen muss ich mir auch extra merken, weil ich den in anderen Methoden auch noch brauche (z.B. Fehlerbehandlung beim Lesen).

    Kennt ihr bessere Möglichkeiten?



  • Es sollte nicht std::exception direkt geworfen werden, sondern Ableitungen davon (od. sogar von std::domain_error od. std::logic_error).
    In den Ableitungen können auch spezifische Error Code od. Meldungen mitgegeben werden.

    Grüsse Simon


Anmelden zum Antworten