The Wayback Machine - https://web.archive.org/web/20211006181245/https://ru.cppreference.com/w/cpp/error/nested_exception
Пространства имён
Варианты
Действия

std::nested_exception

Материал из cppreference.com
< cpp‎ | error

 
C++
Поддержка компилятором
Автономные и размещённые реализации
Язык
Заголовки стандартной библиотеки
Требования к именованию
Макросы тестирования функциональности (C++20)
Поддержка языка
Библиотека концептов (C++20)
Библиотека диагностики
Библиотека общих утилит
Библиотека строк
Библиотека контейнеров
Библиотека итераторов
Библиотека диапазонов (C++20)
Библиотека алгоритмов
Библиотека численных данных
Библиотека ввода/вывода
Библиотека локализаций
Регулярные выражения (C++11)
Атомарные операции (C++11)
Библиотека поддержки потоков (C++11)
Библиотека файловой системы (C++17)
Технические спецификации
Указатель символов
Внешние библиотеки
 
Библиотека утилит
Поддержка языка
Поддержка типа (базовые типы, RTTI, свойства типов)    
Макросы тестирования функциональности библиотеки (C++20)
Управление динамической памятью
Программные утилиты
Обработка ошибок
Поддержка сопрограмм (C++20)
Вариативные функции
(C++17)
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)  
(C++20)
Операции обмена и типа
(C++14)
(C++11)

(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

Элементарные преобразования строк
(C++17)
(C++17)

Stacktrace
 
Обработка ошибок
Обработка исключений
nested_exception
(C++11)
Сбои обработки исключений
(до C++17)
(до C++17)
(C++11)(до C++17)
(до C++17)
Коды ошибок
Коды ошибок
Категории исключений
(ТС TM)
Утверждения
Средства system_error
(C++11)
(C++11)
 
Определено в заголовочном файле <exception>
class nested_exception;
(начиная с C++11)
std::nested_exceptions представляет собой полиморфный класс примесь, которая может захватывать и сохранять текущее исключение, позволяющее вкладывать исключения произвольных типов друг в друга.
Оригинал:
std::nested_exceptions is a polymorphic mixin class which can capture and store the current exception, making it possible to nest exceptions of arbitrary types within each other.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Функции-члены

строит nested_exception
Оригинал:
constructs a nested_exception
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент)
разрушает вложенные исключения
Оригинал:
destructs a nested exception
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(virtual public функция-элемент)
заменяет содержимое nested_exception
Оригинал:
replaces the contents of a nested_exception
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент)
бросает хранится исключение
Оригинал:
throws the stored exception
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент)
получает указатель хранится исключение
Оригинал:
obtains a pointer to the stored exception
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент)

[править] Пример

Демонстрирует строительства и рекурсия через вложенный объект исключения
Оригинал:
Demonstrates construction and recursion through a nested exception object
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
#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);
    }
}

Вывод:

exception: run() failed
 exception: Couldn't open nonexistent.file
  exception: basic_ios::clear

[править] См. также

тип общего указателя для обработки объектов исключений
(определение типа) [править]