std::throw_with_nested
De cppreference.com
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Déclaré dans l'en-tête <exception>
|
||
template< class T > [[noreturn]] void throw_with_nested( T&& t ); |
(depuis C++11) | |
Génère une exception de type non spécifié qui est dérivé de deux std::nested_exception et de std::remove_reference<T>::type, et construite à partir std::forward<T>(t). Le constructeur par défaut du parent nested_exception appelle std::current_exception, capturant l'objet d'exception actuellement pris en charge, le cas échéant, dans 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.
Si std::remove_reference<T>::type est déjà produite à partir std::nested_exception, jette tout simplement 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.
Exige que std::remove_reference<T>::type est
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.
Sommaire |
[modifier] Paramètres
t | - | l'objet exception à lever
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. |
[modifier] Retourne la valeur
(Aucun)
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.
[modifier] Exemple
Démontre la construction et la récursivité à travers un objet d'exception imbriquée
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); } }
Résultat :
exception: run() failed exception: Couldn't open nonexistent.file exception: basic_ios::clear
[modifier] Voir aussi
(C++11) |
un type mixin pour capturer et stocker les exceptions actuelles 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) |
lève l'exception d'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. (fonction générique) |