Я разрабатываю C api для некоторой функциональности, написанной на C ++, и хочу убедиться, что никакие исключения не распространяются ни в одну из экспортируемых функций C.
Простой способ сделать это - убедиться, что каждая экспортируемая функция содержится в:
try {
// Do the actual code
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
Допустим, я знаю, что одно исключение, которое часто пропускается в коде C ++, это std :: bad_alloc, и я хочу обработать его специально, вместо этого я бы написал что-то вроде этого:
try {
// Run the actual code
} catch (std::bad_alloc& e) {
return ERROR_BAD_ALLOC;
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
Можно ли разобрать это каким-то умным способом, чтобы я мог глобально обрабатывать некоторые ошибки по-разному, не добавляя новый оператор catch для обработчика исключений вокруг каждой экспортируемой функции?
Я знаю, что это можно решить с помощью препроцессора, но прежде чем идти по этому пути, я бы убедился, что другого способа сделать это не существует.