std::rethrow_if_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 E > void rethrow_if_nested(const E& e ); | (desde C++11) | |
Si
E
es un tipo que se deriva de manera inequívoca std::nested_exception, extractos y produce la excepción anidada como si se aplicase dynamic_cast<conststd::nested_exception&>(e).rethrow_nested(). De lo contrario, no hace nada .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.
Contenido |
[editar]Parámetros
e | - | el objeto de excepción para volver a lanzar 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. |
[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 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);}}
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) | Lanza su argumento mezclado con std::nested_exception. (plantilla de función) |