【发布时间】:2020-05-10 02:28:14
【问题描述】:
我怎样才能同时catch 多个异常?
我的意思是,如果我得到std::out_of_range 或std::invalid_argument,我必须做A,如果我得到std::runtime_error 或std::bad_alloc,我必须做B
这是一个例子……在某些情况下,我有超过 5 个例外情况让我明白了这一点。
我只是希望我不必多次复制粘贴相同的代码!
【问题讨论】:
我怎样才能同时catch 多个异常?
我的意思是,如果我得到std::out_of_range 或std::invalid_argument,我必须做A,如果我得到std::runtime_error 或std::bad_alloc,我必须做B
这是一个例子……在某些情况下,我有超过 5 个例外情况让我明白了这一点。
我只是希望我不必多次复制粘贴相同的代码!
【问题讨论】:
你不复制'n'粘贴,你将代码放在函数中并在多种情况下调用函数。
方法如下:
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();
}
【讨论】: