在 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();}
}