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
将保留该派生信息,但复制方法会将其切掉。