6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
||||||
1 | ||||||
Исключения в классах25.08.2012, 00:42. Показов 2265. Ответов 18
Метки нет (Все метки)
Здравствуйте.
Какими средствами правильней всего сделать обработку исключений в классах?
0
|
25.08.2012, 00:42 | |
Ответы с готовыми решениями:
18
Определить какие из имён встречаются во всех классах, только в некоторых классах, не встречаются ни в одном Организация собственного исключения и передача в него исходного исключения Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе Заданы имена девочек. Определить, какие встречаются во всех классах, которые есть только в некоторых классах и какие не встречаются |
25.08.2012, 00:58 | 2 |
вариантов много. зависит от того, как по концепции (желательно иметь в приложении) должны обрабатываться инвалидные аргументы. можно возвращать некий INVALID_INTEGER, можно бросать исключение (если оно где-то ловится), можно аварийно завершать приложение, занеся в протокол соотв. запись, можно ...
в общем, все, чего твоя фантазия пожелает.
1
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
25.08.2012, 01:08 [ТС] | 3 |
Спасибо.
1. Как-то это некрасиво и в стиле C. 2. Эх, это ж еще ловить их надо… 3. Выход хороший, в конкретном случае не к месту. Дело вот в чем: я вроде как разрабатываю набор классов, и было бы неплохо всякое неподобство разрешать наиболее общим и безболезненным методом. Кстати, как-то можно выбрасывать ошибку еще при компиляции в случае "неподобства"?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
25.08.2012, 01:13 | 4 |
vortexx1, Только для того, что вы можете проверить на этапе компиляции. В данной функции на этапе компиляции вы ничего проверить не можете.
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
25.08.2012, 01:19 | 5 |
> 1. Как-то это некрасиво и в стиле C.
Это давний срач, что лучше: коды возврата или исключения. (И ассерты сверху.) > 2. Эх, это ж еще ловить их надо… Вот это один из минусов исключений, приводимый в тех срачах: исключения нельзя спокойно игнорировать. На код возврата можно спокойно забить. > Кстати, как-то можно выбрасывать ошибку еще при компиляции в случае "неподобства"? Только на шаблонной магии, но это слегка сложно, выглядит уродски и не работает для переменных. В общем случае нельзя: у Си++ не настолько крутая система типов, чтобы ловить такие несоответствия при компиляции (тип "число от 0 до 42" можно ввести только своим классом). Функция выполняется не при компиляции, а при выполнении программы. Тогда же она выкидывает все ошибки. Конкретное решение больше зависит от того, кому нужна эта ошибка, когда она может произойти и насколько она фатальна. То есть кто обязан следить за тем, чтобы число находилось в пределах [0; 42]. Универсальный вариант: выкинуть исключение, а дальше это уже проблемы того, кто передаёт мусор в вашу функцию.
2
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
25.08.2012, 01:28 | 6 | |||||
Собственно примерно такие шаблонные функции обеспечивают проверку на этапе компиляции.
1
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
25.08.2012, 01:41 [ТС] | 8 |
Хм, ForEveR, может, что-то вроде этого как раз и нужно. Как оно по-научному называется, чтоб можно было погуглить и почитать?
Добавлено через 1 минуту novi4ok, неа, так точно не хочу. Спасибо.
0
|
25.08.2012, 01:45 | 9 |
между делом, так. сегодня как раз пришлось разгребать кучу, которую наворотил один внешний сотрудник лет 5 назад. он любил templstes больше жизни. понять, как эта кухня работает, не может даже он (имею доказательство: как-то, когда очередной раз "горело", позвали. пришел, два часа пялился в код, извинился и ушел).
я угрохал сегодня целый день, чтобы сделать простейшую вещь. как оно все функционирует - был, есть и буду без понятия. дерьмо последнее. до рыгачки доводит разбираться. посему - никакой гарантии, что я сделал лучше, а не хуже - дать не могу. гугли, читай. может, тоже в крутые попадешь.
0
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
||||||
25.08.2012, 01:46 [ТС] | 10 | |||||
И да, специально обученному идиоту вроде ничего не должно помешать сделать
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
25.08.2012, 01:47 | 11 |
Крутые сразу пишут на Хаскелле и смотрят на ваши темплейты как на брейнфак.
Называется это non-type template parameters. Всё замечательно, но так нельзя передавать переменные и объекты, только обычные, буквально записываемые константы.
1
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
25.08.2012, 01:51 [ТС] | 12 |
novi4ok, спасибо. Поучительно.
Добавлено через 2 минуты ~OhMyGodSoLong~, не упоминай Господа всуе. Время Хаскелла еще не настало.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
25.08.2012, 02:28 | 13 |
novi4ok, А это смотря как человек использует шаблоны, да. Любой возможностью плюсов можно выстрелить себе в ногу. Тот же буст состоит из шаблонов чуть более, чем полностью и прекрасно функционирует. А так же локи и прочие либы такого уровня.
1
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|||||||||||
25.08.2012, 11:38 [ТС] | 14 | ||||||||||
В общем, решил использовать throw-catch-конструкции, всем спасибо.
Добавлено через 7 минут Кстати, такой еще вопрос:
0
|
25.08.2012, 12:11 | 15 |
я не против шаблонов как явление. я против попытки каждую одноразовую проблему решать с их помощью, тулить их где только возможно. шаблоны хороши, когда:
- можно довольно просто понять, как ими пользоваться. - они могут использоваться для широкого класса задач, а не только для А и Б - они один раз отлажены, вылизаны, и никогда (!) не придется там что-то менять. - их использование один раз не должно вынуждать тянуть в приложение туеву хучу каких-то неизвестных кусков чего-то.
0
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
|
25.08.2012, 12:32 [ТС] | 16 |
Ребятки, это уже схватка на
Ответьте на вопрос выше, пожалуйста.
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
25.08.2012, 12:37 | 17 |
Да никакой разницы чисто технически. Но так лучше инклудить там, где оно надо. Если используются исключительно в *.cpp — инклудить только в *.cpp.
1
|
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
|
||||||
25.08.2012, 17:27 [ТС] | 18 | |||||
Ну да, я имел ввиду вопрос именно со стороны хорошего тона.
Добавлено через 3 часа 57 минут Еще такой вопрос об исключениях:
0
|
25.08.2012, 17:47 | 19 | |||||
Нет
1
|
25.08.2012, 17:47 | |
25.08.2012, 17:47 | |
Помогаю со студенческими работами здесь
19
какие из этих имен встречаются во всех классах данной параллели которые есть только в некоторых классах и какие из этих имен не встречаются ни в одном Ошибка в классах Видимость в классах константы в классах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |