cpp: поймать исключение с многоточием и посмотреть информацию

Я знаю, что вы можете поймать «все исключения» и распечатать исключение с помощью

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

но это только для исключений, полученных из std::exception. Мне было интересно, есть ли способ получить некоторую информацию из улова с многоточием

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

Если механизм такой же, как многоточие для функций, тогда я смогу сделать что-то вроде приведения аргумента va_list и попытки вызвать метод what().

Я еще не пробовал, но если кто-то знает, как я буду рад узнать, как это сделать.


person ZivS    schedule 03.09.2014    source источник
comment
Вы когда-нибудь задумывались, как может работать вызов what() для int, когда s.o. бросает один?   -  person Christophe    schedule 03.09.2014
comment
Очевидно, то, что я предложил, не всегда будет работать. Я ищу способ получить что-то от него.   -  person ZivS    schedule 03.09.2014


Ответы (2)


Извините, вы не можете этого сделать. Вы можете получить доступ к объекту исключения в блоке catch только для определенного типа исключения.

person Mike Seymour    schedule 03.09.2014

Начиная с C++11 и далее вы можете использовать std::current_exception &c:

std::exception_ptr p;
try {

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

Затем вы можете «осмотреть» p, взяв слепки и т. д.

В более ранних стандартах не было портативного способа проверки исключения на catch(...) сайте.

person Bathsheba    schedule 25.07.2017
comment
что за &c ты написал? - person ZivS; 25.07.2017
comment
Это новое для меня (&c) :) Можете ли вы показать в своем ответе, что вы можете сделать с этим exception_ptr (в чем преимущество)? - person ZivS; 26.07.2017