std::throw_with_nested
De cppreference.com
![]() |
Esta página se ha traducido por ordenador/computador/computadora de la versión en inglés de la Wiki usando Google Translate.
La traducción puede contener errores y palabras aparatosas/incorrectas. Planea sobre el texto para ver la versión original. Puedes ayudar a corregir los errores y mejorar la traducción. Para instrucciones haz clic aquí. |
Definido en el archivo de encabezado <exception>
|
||
template< class T > [[noreturn]] void throw_with_nested( T&& t ); |
(desde C++11) | |
Produce una excepción de tipo no especificado que se deriva tanto de std::nested_exception y de std::remove_reference<T>::type, y construida a partir de std::forward<T>(t). El constructor por defecto de los padres nested_exception llama std::current_exception, capturando el objeto de excepción actualmente a cargo, en su caso, en 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 ya está derivado de std::nested_exception, simplemente lanza 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.
Requiere que std::remove_reference<T>::type es
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.
Contenido |
[editar] Parámetros
t | - | el objeto de excepción para lanzar
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. |
[editar] Valor de retorno
(Ninguno)
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.
[editar] Ejemplo
Demuestra la construcción y la recursividad a través de un objeto de excepción anidada
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.
Ejecuta este código
#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); } }
Salida:
exception: run() failed exception: Couldn't open nonexistent.file exception: basic_ios::clear
[editar] Ver también
(C++11) |
Un tipo mixin para capturar y almacenar las excepciones en curso. (clase) |
(C++11) |
Produce la excepción de una std::nested_exception (plantilla de función) |