Название: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Eten от Март 02, 2011, 16:31 Где взять информацию про имеющиеся классы исключений на Си++? Все облазил, знаю что есть класс Exception, и еще несколько классов производных от него. Но в инете, нигде толко найти не могу уже который час. :'(
Я хоть на данный момент и ищу исключение для математических ситуаций, но хотелось бы узнать. Где можно найти всю информацию по Exception и всем производным от него классам исключений в стандартной библиотеке?! З.Ы. Не хочу городить огород, когда есть такие классы. Да информации о них нет. :-\ Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: meego_man от Март 02, 2011, 16:37 Например здесь, правда на великом и могучем англ :)
http://www.cplusplus.com/reference/std/exception/exception/ ... Some classes derived from exception are: bad_alloc, bad_cast, bad_exception, bad_typeid, logic_error, runtime_error, ios_base::failure... Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Sancho_s_rancho от Март 02, 2011, 16:38 http://www.aoc.nrao.edu/php/tjuerges/ALMA/STL/html-3.4.6/classstd_1_1exception.html
Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: m_ax от Март 02, 2011, 17:28 Если Вы это по поводу математических вычислений, то могу посоветовать использовать библиотеку gsl.
Там уже в самой библиотеке предусмотрены возможные ошибки при вычислениях. К тому же это очень полная библиотека с хорошей документацией + свободная. http://www.gnu.org/software/gsl/ Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Eten от Март 02, 2011, 20:21 Интересно, а правильно ли я понял, что для математических особых ситуаций мне потребуется самому создавать классы, если не пользоваться сторонними библиотеками (например для ситуации деления на ноль)?
Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Fat-Zer от Март 02, 2011, 20:41 Целочисленное деление на ноль - в принципе не возможно перехватиить средствами Си(поправьте меня). Операции с плавающей точкой - вообще не считаются ошибкой, т.е. переменной присваивается NAN или INF и всё. Так что ИМХО, если нужен какой-то особый контроль, то придётся писать свои классы.
ЗЫ: тут в соседней ветке (про преобразование интов и флоатов) нечто подобное обсуждается. Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: m_ax от Март 02, 2011, 21:04 Интересно, а правильно ли я понял, что для математических особых ситуаций мне потребуется самому создавать классы, если не пользоваться сторонними библиотеками (например для ситуации деления на ноль)? Боюсь вам придётся переписывать все функции в которых потенциально возможно появление неприятностей. Мне вообще, исключения не очень симпатичны.. Я их не использую, к тому же сейчас есть механизм сигнал-слот, который более изящно справляется с этим всем. ЗЫ: тут в соседней ветке (про преобразование интов и флоатов) нечто подобное обсуждается. ;D Собственно, как я понял это и есть логическое продолжение той ветки)) Автор тот же))Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Igors от Март 03, 2011, 03:43 Боюсь вам придётся переписывать все функции в которых потенциально возможно появление неприятностей. Да чего там бояться - склепать класс exception за 15 минут? Мне вообще, исключения не очень симпатичны.. Я их не использую, к тому же сейчас есть механизм сигнал-слот, который более изящно справляется с этим всем. Хорошее словцо "изящно", но по-моему исключения и сигналы никак не альтернатива друг другу. Не видно даже такого примера когда вместо exception можно сигналить или наоборот.Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Eten от Март 03, 2011, 05:03 Боюсь вам придётся переписывать все функции в которых потенциально возможно появление неприятностей. Да чего там бояться - склепать класс exception за 15 минут? Интересно, а действительно ли в Си++ нет стандартного иерархического набора особых ситуаций, как например в С#, кроме тех что были приведены (от того самого exception-а)? Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: m_ax от Март 03, 2011, 12:52 Мне вообще, исключения не очень симпатичны.. Я их не использую, к тому же сейчас есть механизм сигнал-слот, который более изящно справляется с этим всем. Хорошее словцо "изящно", но по-моему исключения и сигналы никак не альтернатива друг другу. Не видно даже такого примера когда вместо exception можно сигналить или наоборот.[/quote] Ну вот смотрите: На примере деления на ноль. 1) У нас есть класс SomeClass, который реализует всякие там мат. вычисления.. Ниже код с пояснениями самой идеи. (использовал libssc) Код
Ну вот приммерно так.. Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Igors от Март 03, 2011, 13:25 Код
- код не прерывается, надо вставлять return, если ф-ция глубоко вложена - то везде по стеку - напр. человек разрабатывает класс пока не заботясь как он будет использоваться. Но он уже должен иметь ввиду некую систему, полагать что в дальнейшем (каждый) пользователь класса свяжет "слот-сигнал веники" до того. А тот пользователь в еще более неловком положении потому что Вы заставляете его изучать Вашу систему :) Если напиcано throw - сразу ясно, а кто такой exception_type? Надо разбираться - а зачем? Не проще ли так Код
Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: m_ax от Март 03, 2011, 14:35 Цитировать Ну это сильно проигрывает обычному exception Ну я с Вами тут не соглашусь. И вот почему:- код не прерывается, надо вставлять return, если ф-ция глубоко вложена - то везде по стеку - напр. человек разрабатывает класс пока не заботясь как он будет использоваться. Но он уже должен иметь ввиду некую систему, полагать что в дальнейшем (каждый) пользователь класса свяжет "слот-сигнал веники" до того. А тот пользователь в еще более неловком положении потому что Вы заставляете его изучать Вашу систему Улыбающийся Если напиcано throw - сразу ясно, а кто такой exception_type? Надо разбираться - а зачем? 1) Если ошибка настолько ужасна, что продолжать программу дальше нельзя, то стандартные исключения здесь очень кстати. После блока catch всё и закончится.. А вот если есть надежда, что обработчик исключения всёже как то исправит ситуацию, то нужно позаботится о том, чтобы заново повторить тот фрагмент, где было вызвано исключение. И вот здесь начинается самое весёлое. Т.е. после обработки исключения в блоке catch Вам придётся явно! вернуть управление к точке возникновения ошибки. Как? Помещать блок try в бесконечный цикл? Нет уж, спасибо)) Цитировать - напр. человек разрабатывает класс пока не заботясь как он будет использоваться. Но он уже должен иметь ввиду некую систему, полагать что в дальнейшем (каждый) пользователь класса свяжет "слот-сигнал веники" до того. А тот пользователь в еще более неловком положении потому что Вы заставляете его изучать Вашу систему А я например могу не заставлять пользователя явно связывать сигнал со слотом. Это можно сделать в конструкторе класса, который занимается расчётами. И вместо класса ExceptionHandler, я могу определить просто функцию: Код Поэтому это ещё спорный вопрос, что удобней)) Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: Igors от Март 03, 2011, 15:57 1) Если ошибка настолько ужасна, что продолжать программу дальше нельзя, то стандартные исключения здесь очень кстати. После блока catch всё и закончится.. Ну почему "все"? Напр. пользователь пытается открыть поврежденный файл данных - конечно отлуп ему, но ведь завершать всю программу необязательно :)А вот если есть надежда, что обработчик исключения всёже как то исправит ситуацию, то нужно позаботится о том, чтобы заново повторить тот фрагмент, где было вызвано исключение. И вот здесь начинается самое весёлое. Т.е. после обработки исключения в блоке catch Вам придётся явно! вернуть управление к точке возникновения ошибки. Конечно так бывает, но посмотрим на конкретный класс NNumric: разве он знает что делать с ошибкой? Никак не знает, и ненужно/вредно было бы добавлять в него эту ф-циональность. Поэтому он должен выкинуть ошибку наверх, напр тому кто заряжал аргументы, а тот уж пусть разбирается. На мой взгляд здесь классический случай exception.Как? Помещать блок try в бесконечный цикл? Нет уж, спасибо)) Название: Re: Где взять информацию про имеющиеся классы исключений на Си++? Отправлено: m_ax от Март 03, 2011, 16:08 Цитировать Конечно так бывает, но посмотрим на конкретный класс NNumric: разве он знает что делать с ошибкой? Никак не знает, и ненужно/вредно было бы добавлять в него эту ф-циональность. Поэтому он должен выкинуть ошибку наверх, напр тому кто заряжал аргументы, а тот уж пусть разбирается. На мой взгляд здесь классический случай exception. Ну я вообще то это всё к тому, что механизм сигнал-слот справляется с такой ситуацией (когда обработчик может исправить ситуацию и вернуть управление) справляется, согласитесь, изящьнее, нежели стандартный сценарий исключений)К тому же, хочу заметить, что в самой функции (или в классе) exceptionHandler также можно кинуть обычное исключение, например если уж совсем всё плохо) : Код
;) |