|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
||||||
Исключения в классах25.08.2012, 00:42. Показов 2458. Ответов 18
Метки нет (Все метки)
Здравствуйте.
Какими средствами правильней всего сделать обработку исключений в классах?
0
|
||||||
| 25.08.2012, 00:42 | |
|
Ответы с готовыми решениями:
18
Организация собственного исключения и передача в него исходного исключения Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе |
| 25.08.2012, 00:58 | |
|
вариантов много. зависит от того, как по концепции (желательно иметь в приложении) должны обрабатываться инвалидные аргументы. можно возвращать некий INVALID_INTEGER, можно бросать исключение (если оно где-то ловится), можно аварийно завершать приложение, занеся в протокол соотв. запись, можно ...
в общем, все, чего твоя фантазия пожелает.
1
|
|
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
| 25.08.2012, 01:08 [ТС] | |
|
Спасибо.
1. Как-то это некрасиво и в стиле C. 2. Эх, это ж еще ловить их надо… 3. Выход хороший, в конкретном случае не к месту. Дело вот в чем: я вроде как разрабатываю набор классов, и было бы неплохо всякое неподобство разрешать наиболее общим и безболезненным методом. Кстати, как-то можно выбрасывать ошибку еще при компиляции в случае "неподобства"?
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 25.08.2012, 01:13 | |
|
vortexx1, Только для того, что вы можете проверить на этапе компиляции. В данной функции на этапе компиляции вы ничего проверить не можете.
1
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 25.08.2012, 01:19 | |
|
> 1. Как-то это некрасиво и в стиле C.
Это давний срач, что лучше: коды возврата или исключения. (И ассерты сверху.) > 2. Эх, это ж еще ловить их надо… Вот это один из минусов исключений, приводимый в тех срачах: исключения нельзя спокойно игнорировать. На код возврата можно спокойно забить. > Кстати, как-то можно выбрасывать ошибку еще при компиляции в случае "неподобства"? Только на шаблонной магии, но это слегка сложно, выглядит уродски и не работает для переменных. В общем случае нельзя: у Си++ не настолько крутая система типов, чтобы ловить такие несоответствия при компиляции (тип "число от 0 до 42" можно ввести только своим классом). Функция выполняется не при компиляции, а при выполнении программы. Тогда же она выкидывает все ошибки. Конкретное решение больше зависит от того, кому нужна эта ошибка, когда она может произойти и насколько она фатальна. То есть кто обязан следить за тем, чтобы число находилось в пределах [0; 42]. Универсальный вариант: выкинуть исключение, а дальше это уже проблемы того, кто передаёт мусор в вашу функцию.
2
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 25.08.2012, 01:28 | ||||||
|
Собственно примерно такие шаблонные функции обеспечивают проверку на этапе компиляции.
1
|
||||||
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
| 25.08.2012, 01:41 [ТС] | |
|
Хм, ForEveR, может, что-то вроде этого как раз и нужно. Как оно по-научному называется, чтоб можно было погуглить и почитать?
Добавлено через 1 минуту novi4ok, неа, так точно не хочу. Спасибо.
0
|
|
| 25.08.2012, 01:45 | ||
|
я угрохал сегодня целый день, чтобы сделать простейшую вещь. как оно все функционирует - был, есть и буду без понятия. дерьмо последнее. до рыгачки доводит разбираться. посему - никакой гарантии, что я сделал лучше, а не хуже - дать не могу. гугли, читай. может, тоже в крутые попадешь.
0
|
||
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
||||||
| 25.08.2012, 01:46 [ТС] | ||||||
|
И да, специально обученному идиоту вроде ничего не должно помешать сделать
0
|
||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 25.08.2012, 01:47 | |
|
Крутые сразу пишут на Хаскелле и смотрят на ваши темплейты как на брейнфак.
Называется это non-type template parameters. Всё замечательно, но так нельзя передавать переменные и объекты, только обычные, буквально записываемые константы.
1
|
|
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
| 25.08.2012, 01:51 [ТС] | |
|
novi4ok, спасибо. Поучительно.
Добавлено через 2 минуты ~OhMyGodSoLong~, не упоминай Господа всуе. Время Хаскелла еще не настало.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 25.08.2012, 02:28 | |
|
novi4ok, А это смотря как человек использует шаблоны, да. Любой возможностью плюсов можно выстрелить себе в ногу. Тот же буст состоит из шаблонов чуть более, чем полностью и прекрасно функционирует. А так же локи и прочие либы такого уровня.
1
|
|
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|||||||||||
| 25.08.2012, 11:38 [ТС] | |||||||||||
|
В общем, решил использовать throw-catch-конструкции, всем спасибо.
Добавлено через 7 минут Кстати, такой еще вопрос:
0
|
|||||||||||
| 25.08.2012, 12:11 | ||
|
- можно довольно просто понять, как ими пользоваться. - они могут использоваться для широкого класса задач, а не только для А и Б - они один раз отлажены, вылизаны, и никогда (!) не придется там что-то менять. - их использование один раз не должно вынуждать тянуть в приложение туеву хучу каких-то неизвестных кусков чего-то.
0
|
||
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
| 25.08.2012, 12:32 [ТС] | |
|
Ребятки, это уже схватка на
Ответьте на вопрос выше, пожалуйста.
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 25.08.2012, 12:37 | |
|
Да никакой разницы чисто технически. Но так лучше инклудить там, где оно надо. Если используются исключительно в *.cpp — инклудить только в *.cpp.
1
|
|
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
||||||
| 25.08.2012, 17:27 [ТС] | ||||||
|
Ну да, я имел ввиду вопрос именно со стороны хорошего тона.
Добавлено через 3 часа 57 минут Еще такой вопрос об исключениях:
0
|
||||||
|
|
|||||||
| 25.08.2012, 17:47 | |||||||
1
|
|||||||
| 25.08.2012, 17:47 | |
|
Помогаю со студенческими работами здесь
19
константы в классах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|