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

cpp: catch exception with ellipsis and see the information

提问人:ZivS 提问时间:9/3/2014 更新时间:6/13/2023 访问量:1598

问:

我知道您可以通过以下方式捕获“所有异常”并打印异常

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

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

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

如果机制与函数的省略号相同,那么我应该能够做一些事情,例如转换参数并尝试调用该方法。va_listwhat()

我还没有尝试过,但如果有人知道这种方式,我会很高兴知道怎么做。

C++ try-catch 省略号 可变参数

评论

0赞 Christophe 9/3/2014
你有没有想过当 s.o. 抛出一个 int 时,如何在 int 上调用 what() ?
0赞 ZivS 9/3/2014
显然,我的建议并不总是有效。我正在寻找一种方法来从中获得一些东西。

答:

6赞 Mike Seymour 9/3/2014 #1

对不起,你不能那样做。您只能访问特定异常类型的块中的异常对象。catch

9赞 Bathsheba 7/25/2017 #2

从 C++11 及更高版本,可以使用 &c:std::current_exception

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

然后,您可以通过进行投射和 c 来“检查”,尽管不是以便携式方式。p

在早期的标准中,除了用 重新抛出异常之外,没有在站点上与异常相交的可移植方法。catch(...)throw;

评论

3赞 ZivS 7/25/2017
你写的是什么?&c
0赞 ZivS 7/26/2017
这对我来说是新的(&c):)你能在你的答案中说明你能用它做什么(有什么好处)吗?exception_ptr
0赞 rustyx 11/18/2022
你不能从中得到任何细节,你只能重新抛出它。std::exception_ptr