Поймать несколько исключений - PullRequest
1 голос
/ 23 января 2020

Как я могу catch более одного исключения одновременно?

Я имею в виду, я должен сделать A, если я получу std::out_of_range или std::invalid_argument или B, если я получу std::runtime_error или std::bad_alloc

Это пример ... В некоторых случаях у меня есть более 5 исключений, которые приводят меня к одной и той же точке.

Я просто надеюсь, что мне не нужно скопируйте и вставьте один и тот же код несколько раз!

1 Ответ

2 голосов
/ 23 января 2020

Вы не копируете 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();
}
...