Un colto eccezione è accessibile dalla funzione std :: current_exception(), che è definito nella <eccezione>. Questo è stato introdotto in C++ 11.
std::exception_ptr current_exception();
Tuttavia, std :: exception_ptr è un tipo di implementazione definito, quindi non è possibile raggiungere i dettagli in ogni caso. typeid(current_exception()).name()
ti dice exception_ptr, non l'eccezione contenuta. Quindi, l'unica cosa che puoi fare è std :: rethrow_exception(). (Queste funzioni sembrano essere lì per standardizzare catch-pass-and-rethrow attraverso i thread.)
fonte
2015-08-25 18:42:31
Quale messaggio desideri uscire dall'eccezione? Cosa succede se l'oggetto lanciato è un 'int'? Quando prendi (...) ', non sai che l'eccezione catturata avrà * un * messaggio. – jalf
Questa domanda mi ha dato un pensiero strano (non avrebbe funzionato, ma sarebbe stata una cosa divertente se lo avesse fatto): modello catch (const T & ex) {...} Non penso che potrebbe funzionare dal le eccezioni sono più un meccanismo di runtime ... o potrebbe? I meccanismi di srotolamento dello stack coinvolti nel lancio di un'eccezione e della ramificazione sul blocco di blocco corretto mi sembrano davvero magici. Forse il blocco di catch corretto da ramificare è ancora determinato in fase di compilazione, il che spiegherebbe una delle ragioni per cui è così pericoloso attraversare i limiti del modulo. –
stinky472