c ++:使用省略号捕获异常并查看信息

时间:2014-09-03 11:00:47

标签: c++ try-catch ellipsis variadic

我知道您可以捕获“所有异常”并通过

打印异常
try
{
    //some code...
}catch(const std::exception& e) {
   cout << e.what();
}

但这仅适用于从std :: exception派生的异常。 我想知道是否有办法从省略号捕获中获取一些信息

try
{
    //some code...
}catch(...) {
   // ??
}

如果机制与函数的省略号相同,那么我应该能够执行诸如转换va_list的参数并尝试调用what()方法之类的内容。

我还没有尝试过,但如果有人知道我会很高兴知道如何。

2 个答案:

答案 0 :(得分:5)

从C ++ 11开始,您可以使用std::current_exception&amp; c:

std::exception_ptr p;
try {

} catch(...) {
    p = std::current_exception();
}

然后你可以通过演员表&amp; c来“检查”p

在早期的标准中,没有可移植的方法来检查catch(...)站点的异常。

答案 1 :(得分:3)

抱歉,你不能这样做。您只能在catch块中访问特定异常类型的异常对象。