Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread375581.html
ПОМОГИТЕ НАЙТИ ОФИБКУ В ПРОГЕ /**************************************************************************** * * * File : main.c * * * * Purpose : Console mode (command line) program. ...
C++ Преобразование типов. Дружественные функции Создать класс комплексных чисел. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют аргументы типа int, double, complex. Тело перегруженных функций должны быть одинаковыми. Создать два класса вектор (float *) и матрица (float **). Определить конструкторы - по умолчанию, с параметром, для... 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 namespace std;
C++ Коммутатор Клозе
Люди если Кто нибудь реализовывал коммутаор Клозе на С++ ОТЗОВИТЕСЬ, бьюсь с ним долго, но не могу победить! Может ссылку кто знает где толково почитать можно, как его реализовать , ну а если исходничек сбросите НИЗКИЙ вам поклон. У меня основа комутатор 4х4 нужно сделать 16х16 три яруса по 4ре микросхемы - никак не могу описать алгоритм коммутации - как не извернусь нахожу комбинацию котороая...
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 минут
при таком подходе "подъем" ошибки начинается с глубины. То есть, отказал самый низкоуровневый модуль, от него начинается цепная реация - более верхие модули фиксируют сбой, и в соответствии со своими обработчиками ошибок принимают решения. Если сами не могут исправить проблему, передают её на уровень выше.

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

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

/резюмируя: Информация об ошибке идет снизу вверх, а не с верха вниз.
 
Текущее время: 01:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru