Вы не копируете n'p'paste, вы помещаете код в функции и вызываете функцию в нескольких случаях.
Вот как:
try {
/* Stuff */
} catch (const std::out_of_range&) {
do_A();
} catch (const std::invalid_argument&) {
do_A();
} catch (const std::runtime_error&) {
do_B();
} catch (const std::bad_alloc&) {
do_B();
}
Если вам нужно одно и то же исключение обрабатывая в нескольких местах, вы можете поместить его в функцию, например, так:
void handle_exception() {
try {
throw; // re-throw the original exception our caller caught, so we can catch and handle specific ones.
} catch (const std::out_of_range&) {
do_A();
} catch (const std::invalid_argument&) {
do_A();
} catch (const std::runtime_error&) {
do_B();
} catch (const std::bad_alloc&) {
do_B();
}
}
А затем, в нескольких местах, вы можете сделать
try {
/* Stuff */
} catch (...) {
handle_exception();
}