Форум программистов, компьютерный форум, киберфорум
Наши страницы

Обработка ошибок - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread375581.html
ПОМОГИТЕ НАЙТИ ОФИБКУ В ПРОГЕ /**************************************************************************** * * * File ...
C++ Преобразование типов. Дружественные функции Создать класс комплексных чисел. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют... http://www.cyberforum.ru/cpp-beginners/thread375570.html
C++ Помогите разобраться
У меня есть координаты North,West,East,South. Мне нужно отобразить их на осях ОХ и ОУ. Допустим я ввожу North 5 East 3 South 1 Вывод х=3, у=4. #include <iostream> #include <cstring> using...
C++ Коммутатор Клозе
Люди если Кто нибудь реализовывал коммутаор Клозе на С++ ОТЗОВИТЕСЬ, бьюсь с ним долго, но не могу победить! Может ссылку кто знает где толково почитать можно, как его реализовать , ну а если...
C++ Вопрос про утилизацию классов http://www.cyberforum.ru/cpp-beginners/thread375546.html
Как выполнить утилизацию класса? Допустим я написал код прототипа класса(интерфейс) и код определения класса. Теперь надо очереди откомпилировать? Еще я прочитал,что можно сделать так,чтобы ...
C++ Вывод числовых кодов в шестнадцатеричном виде. Напишите программу, которая выводит буквы 'a' - 'z' . #include <iostream> int main(){ char letter = 97; while(letter < 123) { подробнее

Показать сообщение отдельно
Bers
Заблокирован
31.10.2011, 18:54
я делаю так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#inlude "TError.h" //шаблонный класс обработки ошибок
 
class CTest: public TError<CTest>  //подключаю обработчик ошибок
{
     Cildren myTest;
     ...
     public: 
          int Do() 
          {   
                SetError( myTest.Do() );   //если агрегированный класс вернул не ноль,
                                                       // значит метод завершился ошибкой
 
                ReactionError( METHOD_DO );  //Проверить, была ли ошибка, и отреагировать на неё.
                                                              //METHOD_DO  - идетификатор инцидента (метода), 
                                                              //в котором произошла ошибка
 
                return GetLastError(); //передать вызывающей стороне данные об ошибке (или успехе)
           }
};
Фокус в том, что благодаря специализации шаблона можно легко создать совершенно уникальный обработчик ошибок для самых разных конкретных классов.
Любой метод внутри класса, который может вернуть ошибку - должен быть проверен.
И если факт ошибки установлен - должна быть соответствующая реакция на эту ошибку.
Происходить это должно автоматически

Два слова о ReactionError( METHOD_DO );
Если ошибка -программная, понятно - зажгётся фонарик, который не очень вежливо потребует присутствия программиста.

Но если ошибка - некорректные входные данные (а они в принципе могут быть не корректными) - просто уведомление об отказе работать даже не обрушить программу.

Фишка в том, что внутри ReactionError( METHOD_DO );
все возможные программные ошибки можно оформить таким образом, что их обработка не войдёт в релиз.

Добавлено через 9 минут
при таком подходе "подъем" ошибки начинается с глубины. То есть, отказал самый низкоуровневый модуль, от него начинается цепная реация - более верхие модули фиксируют сбой, и в соответствии со своими обработчиками ошибок принимают решения. Если сами не могут исправить проблему, передают её на уровень выше.

Чем выше уровень, тем ниже вероятность, что сбой удастся устранить.

В отдельных ситуациях, на тестах, я наблюдал как пищали классы один за другим по цепочке: ошибка!" "ошибка!"

/резюмируя: Информация об ошибке идет снизу вверх, а не с верха вниз.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.