std::throw_with_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 T > [[noreturn]] void throw_with_nested( T&& t ); |
(dal C++11) | |
Genera un'eccezione di tipo non specificato, che deriva sia da std::nested_exception e da std::remove_reference<T>::type, e costruito da std::forward<T>(t). Il costruttore di default del genitore nested_exception chiama std::current_exception, catturando l'oggetto eccezione attualmente gestita, se del caso, in std::exception_ptr.
Original:
Throws an exception of unspecified type that is derived from both std::nested_exception and from std::remove_reference<T>::type, and constructed from std::forward<T>(t). The default constructor of the nested_exception parent calls std::current_exception, capturing the currently handled exception object, if any, in std::exception_ptr.
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.
Se std::remove_reference<T>::type è già derivato da std::nested_exception, lancia semplicemente std::forward<T>(t).
Original:
If std::remove_reference<T>::type is already derived from std::nested_exception, simply throws std::forward<T>(t).
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.
Richiede che std::remove_reference<T>::type è
CopyConstructible
Original:
Requires that std::remove_reference<T>::type is
CopyConstructible
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
t | - | l'oggetto di un'eccezione da generare
Original: the exception object to throw 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 holds void print_exception(const std::exception& e, int level = 0) { std::cerr << std::string(level, ' ') << "exception: " << e.what() << '\n'; try { std::rethrow_if_nested(e); } catch(const std::exception& e) { print_exception(e, level+1); } catch(...) {} } // sample function that catches an exception and wraps it in a nested exception void open_file(const std::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 exception void 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 exception int main() { try { run(); } catch(const std::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) |
genera l'eccezione di un std::nested_exception Original: throws the exception from a std::nested_exception 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) |