Ich entwickle ein CAPI für einige in C++ geschriebene Funktionalität, und ich möchte sicherstellen, dass keine Ausnahmen aus den exportierten C-Funktionen propagiert werden.Codewiederverwendung bei der Ausnahmebehandlung
Der einfache Weg, es ist dafür, dass jede exportierte Funktion in einem tun enthalten ist:
try {
// Do the actual code
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
Sagen wir, ich eine Ausnahme kennen, die oft in der C verpasst ++ Code ist std :: bad_alloc und ich möchte so etwas zu behandeln, es speziell würde ich stattdessen schreiben:
try {
// Run the actual code
} catch (std::bad_alloc& e) {
return ERROR_BAD_ALLOC;
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
Ist es möglich, dies in einigen cleveren Weg zu zersetzen, so dass ich global für die Exception-Handler behandeln können einige Fehler anders, ohne eine neue catch-Anweisung Hinzufügen um jede exportierte Funktion?
Ich bin mir bewusst, dass dies mit dem Präprozessor gelöst werden kann, aber bevor ich diesen Weg gehe, würde ich sicherstellen, dass es keinen anderen Weg gibt, es zu tun.
+1: Gute Idee :-) –
Perfekt gearbeitet. Vielen Dank! – Laserallan
Im echten Code vergessen Sie nicht, Ausnahmen durch Verweis abzufangen: catch (std :: bad_alloc &) – Jem