C++ 是否有一种模式用于在彼此之后执行多个抛出函数?

C++ 是否有一种模式用于在彼此之后执行多个抛出函数?,c++,exception-handling,C++,Exception Handling,如果我想在一段代码中忽略异常,我正在寻找一种编写带有异常的代码的好方法 考虑 bool ClearAllCaches() { bool success = ClearPersistentCache(); success &= ClearTransientCache(); success &= ClearRemoteCache(); return success; } 如果这些函数是抛出而不是返回一个成功值,我还想重新抛出其中一个抛出的任何异常,但

如果我想在一段代码中忽略异常,我正在寻找一种编写带有异常的代码的好方法

考虑

bool ClearAllCaches() {
    bool success = ClearPersistentCache();
    success &= ClearTransientCache();
    success &= ClearRemoteCache();
    return success;
}
如果这些函数是抛出而不是返回一个成功值,我还想重新抛出其中一个抛出的任何异常,但只有在所有这些都完成之后,有没有比这更干净的解决方案

void ClearAllCaches() {
    MyException persistentException = MyException(ErrorCode::None);
    try {
        ClearPersistentCache();
    } catch (const MyException& e) {
        persistentException = e;
    }
    //...same for ClearTransientCache()
    ClearRemoteCache(); // <- does not have to be caught.
    if (persistentException.getCode() != ErrorCode::None) {
        throw persistentException;
    }
    //...same for ClearTransientCache()
}
void ClearAllCaches(){
MyException persistentException=MyException(错误代码::无);
试一试{
ClearPersistentCache();
}捕获(常量MyException&e){
持久异常=e;
}
//…与ClearTransientCache()相同

ClearRemoteCache();//使用lambda和
std::exception\u ptr

void ClearAllCaches() {
    std::exception_ptr eptr;
    auto CallAndStoreException = [&](auto func) {
        try {
            func();
        } catch (...) {
            eptr = std::current_exception();
        }
    };

    CallAndStoreException(&ClearPersistentCache);
    CallAndStoreException(&ClearTransientCache);
    CallAndStoreException(&ClearRemoteCache);

    if (eptr) {
        std::rethrow_exception(eptr);
    }
}

但是,如果你先扔掉那些抛出的信息,你确定异常是正确的方法吗?如果你确定你必须这样做,也许还可以看看

如果发生了异常,有必要修复原因。捕获异常,像没有发生过一样继续,然后重新抛出,这与如果有两个函数抛出,你会怎么做?异常应该表示需要修复的异常。你不应该使用异常来控制程序流,这被认为是糟糕的编程风格。可能值得指出使用
std::exception\u ptr
和复制
MyException
:如果有人定义了一个从
MyException
派生的类并抛出该类,
exception\u ptr
将保留该派生信息,但复制方法会将其切掉。