![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Kipter |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Суть такова....
У каждого класса есть свой набор всевозможных ошибок которые могут происходить в его функциях. например...
Класс-исключение для всех классов вообщем то по коду одинаков и тупо копипастить его для каждого класса было бы наверное глупо. Однако использовать его для всех классов не приемлемо ибо будут совпадать коды ошибок а в каком классе именно произошло исключение будет неясно.
используется как
тогда я сделал так
Собственно смущает вопрос правильности подхода... поидее для каждого класса генерируется код еще под один конструктор нового типа исключения, да и пришлось использовать макро-определение..... Да и думаю не ожидают ли подводные камни.... есть идеи? P.S: Не хватает оператора что то вроде typedef но который бы делал не ассоциацию типа а вводил новый тип но только для правил компилятора =) Это сообщение отредактировал(а) Kipter - 24.2.2010, 23:53 |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
почитайте про шаблоны (template<>)
|
|||
|
||||
Kipter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Хе-хе, про шаблоны знаю.... но не получу ли я ими еще более излишнюю кодогенерацию? тогда для каждого класса будет сгенерирован не только излишний конструктор но и функции члены! получим еще больше лишнего коду ради "удобства" Да и ктомуже синтаксис красивше не станет! я бы сказал появится даже больше нагромождений. Преимущество будет только в проверке типов, в макрос то можно всевозможную дряно пихать, но с другой тсороны ошибку получим сразу, взглянем на макрос и все поймем. |
|||
|
||||
Kipter |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Хе-хе, про шаблоны знаю.... но не получу ли я ими еще более излишнюю кодогенерацию? тогда для каждого класса будет сгенерирован не только излишний конструктор но и функции члены! получим еще больше лишнего коду ради "удобства" Да и ктомуже синтаксис красивше не станет! я бы сказал появится даже больше нагромождений. Преимущество будет только в проверке типов, в макрос то можно всевозможную дряно пихать, но с другой тсороны ошибку получим сразу, взглянем на макрос и все поймем. Добавлено через 12 минут и 15 секунд Вот вариант с использование Специализированных шаблонов о которых говорил mes ссори за грязное исполнение в одном фаиле и реализацией по месту объявления, просто так быстрее =)
Собственно что дает? Убили макроопределение.... С шаблонами есть типо как проверка типов, случайно не сунешь левый тип =) (реализация увы неполная поэтому в данном примере сунешь) Но с другой стороны сунув левый тип в макро - тоже ошибку получишь, глянешь в макрос и все поймешь + можно комменты к нему накидать. В плане кодогенерации получаем тоже самое что и с макросом + код конструктора каждому классу. Но теперь нам необходимо выкидывать исключения вот так: throw XException<HTTPClient>("HTTP", 3); заместо возможного throw XException("HTTP", 3); c макросом. и писать перед каждым классом
можно конечно сунуть в макро-определение, но опять таки получим масло масленое, за что боролись на то и напоролись оО Вообщем пока что такой вариант мне не приглядывается - выигрыша мало, нагромождения есть. |
||||
|
|||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не больше чем макросом ![]()
нет, я говорил о несколько другом варианте, вот набросок :
ну а дальше уже делайте вариацию под Ваши цели ![]() |
||||
|
|||||
Kipter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
mes,
![]() Чорт, действительно, красива.... Надо высыпаться то то бредни в голову к вечеру лезут. Спасибо++ |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
mes, а зачем сразу шобло ны ? может лучше просто создать базовый классик. с частично виртуальными методами.
а в сыновьих классах эти виртуалки реализовать в соответствии с требованиями. я не знаю что выгоднее - шаблоны или наследование ? UPD: сначала я понял будто у каждого из классов будут особенные эксепшены, разных типов - разным количеством данных на выходе, разными what(), и т.п. а сейчас взглянул на примеры, и получается, что никаких принципиально разных эксепшенов ему тут не надо. можно обойтись действительно с шаблонами... довольно читабельно, и ручками писАть меньше. Это сообщение отредактировал(а) bilbobagginz - 25.2.2010, 23:12 -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
а вот зачем интересно обычно для каждого класса не нужно городить свой класс исключения, все равно в большинстве случаев будешь ловить через std::exception ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |