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