std::rethrow_if_nested
Da cppreference.com.
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
Elemento definito nell'header <exception> | ||
template<class E > void rethrow_if_nested(const E& e ); | (dal C++11) | |
Se
E
è un tipo che è inequivocabilmente derivato da std::nested_exception, estratti e genera l'eccezione nidificata come se chiamando dynamic_cast<conststd::nested_exception&>(e).rethrow_nested(). In caso contrario, non fa nulla.Original:
If
E
is a type that is unambiguously derived from std::nested_exception, extracts and throws the nested exception as if by calling dynamic_cast<conststd::nested_exception&>(e).rethrow_nested(). Otherwise, does nothing.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica]Parametri
e | - | l'oggetto eccezione di ripetere la generazione Original: the exception object to rethrow The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[modifica]Valore di ritorno
(Nessuno)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica]Esempio
Dimostra costruzione e ricorsione attraverso un oggetto eccezione nidificata
Original:
Demonstrates construction and recursion through a nested exception object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>#include <stdexcept>#include <exception>#include <string>#include <fstream> // prints the explanatory string of an exception. If the exception is nested,// recurses to print the explanatory of the exception it holdsvoid print_exception(conststd::exception& e, int level =0){std::cerr<<std::string(level, ' ')<<"exception: "<< e.what()<<'\n';try{ std::rethrow_if_nested(e);}catch(conststd::exception& e){ print_exception(e, level+1);}catch(...){}} // sample function that catches an exception and wraps it in a nested exceptionvoid open_file(conststd::string& s){try{std::ifstream file(s); file.exceptions(std::ios_base::failbit);}catch(...){std::throw_with_nested(std::runtime_error("Couldn't open "+ s));}} // sample function that catches an exception and wraps it in a nested exceptionvoid run(){try{ open_file("nonexistent.file");}catch(...){std::throw_with_nested(std::runtime_error("run() failed"));}} // runs the sample function above and prints the caught exceptionint main(){try{ run();}catch(conststd::exception& e){ print_exception(e);}}
Output:
exception: run() failed exception: Couldn't open nonexistent.file exception: basic_ios::clear
[modifica]Vedi anche
(C++11) | un tipo mixin per acquisire e memorizzare le eccezioni attuali Original: a mixin type to capture and store current exceptions The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (classe) |
(C++11) | lancia la sua tesi con std::nested_exception misto trovi Original: throws its argument with std::nested_exception mixed in The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |