在 C++11 的几种方法中重新抛出自定义异常
Rethrow custom exceptions in several methods C++11
我有一个用例,我必须捕获可以抛出的各种异常并从我的库中传递一个等效的异常
示例:
def subscribe() {
try {
.....
.....
catch (A e) { throw new MY_A(e);}
catch (B e) { throw new MY_B(e);}
catch (C e) { throw new MY_C(e);}
catch(...) { throw default(e)}
}
我想为几种方法执行此操作 - 订阅、取消订阅、停止、启动等,有没有简单的方法来执行此操作?
如果它在 python,我会简单地编写一个装饰器并实现它。在 C++11 中执行此操作的简单方法是什么?
是的,您可以使用 std::current_exception()
在 catch(...)
块中获取当前异常的句柄。结合在函数调用时计算默认参数的事实,我们可以执行以下操作:
void common_exception_handler(std::exception_ptr eptr = std::current_exception()) {
try {
if (eptr) {
std::rethrow_exception(eptr);
}
}
catch (A const &e) {throw MY_A(e);}
catch (B const &e) {throw MY_B(e);}
catch (C const &e) {throw MY_C(e);}
}
void subscribe() {
try {
...
}
catch (...) {common_exception_handler();}
}
我有一个用例,我必须捕获可以抛出的各种异常并从我的库中传递一个等效的异常
示例:
def subscribe() {
try {
.....
.....
catch (A e) { throw new MY_A(e);}
catch (B e) { throw new MY_B(e);}
catch (C e) { throw new MY_C(e);}
catch(...) { throw default(e)}
}
我想为几种方法执行此操作 - 订阅、取消订阅、停止、启动等,有没有简单的方法来执行此操作?
如果它在 python,我会简单地编写一个装饰器并实现它。在 C++11 中执行此操作的简单方法是什么?
是的,您可以使用 std::current_exception()
在 catch(...)
块中获取当前异常的句柄。结合在函数调用时计算默认参数的事实,我们可以执行以下操作:
void common_exception_handler(std::exception_ptr eptr = std::current_exception()) {
try {
if (eptr) {
std::rethrow_exception(eptr);
}
}
catch (A const &e) {throw MY_A(e);}
catch (B const &e) {throw MY_B(e);}
catch (C const &e) {throw MY_C(e);}
}
void subscribe() {
try {
...
}
catch (...) {common_exception_handler();}
}