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