一起处理异常的常见部分

LiK*_*Kao 5 c++ exception-handling

我目前有一些我试图重构的代码.大量异常具有一些针对所有异常的公共代码以及需要针对每种特定异常类型单独处理的一些特定代码.我试图弄清楚如何摆脱每个catch块中的共同部分.一个想法就是这样做:

try {
  /* Stuff that may fail */
} catch( const std::exception & ) {
  /* do common part here */
  try { throw; } 
  catch( const exception1 & ) {
    /* do stuff for exception1 here */
  }
  catch( const exception2 & ) {
    /* do stuff for exception2 here */
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,这让我觉得有些难看.

有没有更好的方法来分解这个共同的逻辑,或者实际上是否有理由完全避免这种尝试?

Mat*_* M. 3

一般来说,try/catch应该只在代码中稀疏出现。问题是,很多时候子句中完成的操作catch也应该在提前返回的情况下完成,例如。

惯用的 C++ 广泛使用 RAII 来避免需要在子句中进行清理的情况catch,这通常会消除大部分工作。

现在,你的模式本身并没有那么糟糕,它确实考虑了常见的东西。但这种常见的事情也许可以自动处理。

在我偶然发现的所有代码库中,只有几次我看到真正使用 ofcatch子句,不要将其用作离合器。