我想知道是否有可能(通过巧妙的转换规则)编写一个“异常”类来帮助解决以下问题:
而不是写:
try {
...
} catch (std::execption const e) { // StdLib exceptions
} catch (CException* pEx) { // MFC exceptions
} catch (CORBA::Exception const& e) { // CORBA exceptions
} // note handling code inside catch blocks omitted for brevity
如果可以构造一个像这样工作的类型,那就太好了:
try {
...
} catch( magic_exception_handle const& e) { // catches all three types mentioned above
const std::string msg = e.what(); // could also provide generalized message extraction
}
这可能吗?如何?
注意:我不喜欢的其他解决方案:
- 我可以,
catch(...)
但我不想包罗万象。 捕获处理函数:
void handler3() { try { throw; } catch (std::execption const e) { // StdLib exceptions } catch (CException* pEx) { // MFC exceptions } catch (CORBA::Exception const& e) { // CORBA exceptions } // note handling code inside catch blocks omitted for brevity } ... try { ... } catch(...) { handler3(); }
也不削减它,因为虽然任何其他异常都会向外抛出,但它首先会捕获任何其他异常,这会导致在重新抛出之前过早地展开堆栈。(这对于 Windows 上产生的任何崩溃转储都非常不方便。)
- 我可以为 catch 块编写一个宏。(呃)
那么,是否可以创建magic_exception_handle
类型?已经完成了吗?