std::rethrow_if_nested
来自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. |
| Defined in header <exception>
|
||
| template< class E > void rethrow_if_nested( const E& e ); |
(C++11 起) | |
如果
E是一个类型,是明确地来自std::nested_exception,提取物和抛出的嵌套异常,如果通过调用dynamic_cast<const std::nested_exception&>(e).rethrow_nested()。否则,什么都不做.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<const std::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.
目录 |
[编辑] 参数
| e | - | 重新抛出的异常对象
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. |
[编辑] 返回值
(无)
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.
[编辑] 为例
示范建设和递归,通过嵌套异常对象
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
[编辑] 另请参阅
| (C++11) |
一个mixin捕获和存储当前的异常的类型 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. (类) |
| (C++11) |
std::nested_exception混合 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. (函数模板) |