Ist das Folgende in C++ gut definiert, oder nicht? Ich bin gezwungen, Ausnahmen in Rückgabecodes zu "konvertieren" (die betreffende API wird von vielen C-Benutzern verwendet, daher muss ich sicherstellen, dass alle C++-Ausnahmen abgefangen und behandelt werden, bevor die Kontrolle an den Aufrufer zurückgegeben wird).
enum ErrorCode {…};
ErrorCode dispatcher() {
try {
throw;
}
catch (std::bad_alloc&) {
return ErrorCode_OutOfMemory;
}
catch (std::logic_error&) {
return ErrorCode_LogicError;
}
catch (myownstdexcderivedclass&) {
return ErrorCode_42;
}
catch(...) {
return ErrorCode_UnknownWeWillAllDie;
}
}
ErrorCode apifunc() {
try {
// foo() might throw anything
foo();
}
catch(...) {
// dispatcher rethrows the exception and does fine-grained handling
return dispatcher();
}
return ErrorCode_Fine;
}
ErrorCode apifunc2() {
try {
// bar() might throw anything
bar();
}
catch(...) {
return dispatcher();
}
return ErrorCode_Fine;
}
Ich hoffe, das Beispiel zeigt meine Absicht. Ich vermute, dass dies ein undefiniertes Verhalten ist, aber ich bin mir nicht sicher. Bitte geben Sie ggf. Zitate aus der Norm an. Alternative Ansätze sind ebenfalls willkommen.
Danke!