![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Я думаю это личное дело каждого пользоваться динамическим приведением или нет(ИМХО вариант с числовыми константами мне вообще не нравится, как мне кажется он подвержен ошибкам не менее других способов). Однако думается для конечной реализации автору темы стоит выбрать тот вариант, который он более всего понимает и соответственно в котором менее всего возможны ошибки при реализации. В данном случае визитор работает на более высоком "уровне понимания" и реализация его может занять больше усилий. Стоит принять во внимание дальнейшее использование данной схемы автором. Если это всего навсего решение одной задачи, то динамическое приведение будет лучшим вариантом. Если автор будет использовать ее и далее, то лучше конечно визитор.
PS Интересно, с чего это динамическое приведение свидетельствует о непродуманности. Оно проверяет корректность приведения в ходе выполнения и используется как раз в таких случаях. В плане статического я еще могу согласиться (ИМХО не всегда). Это сообщение отредактировал(а) fry - 27.4.2009, 00:22 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Потому что подвержена ошибкам, в частности возможно (в лестнице условий) 1. вместо приведения к внуку приведется к сыну (при неправильной очередности лестницы условий) 2. забыто применение операции к какому либо типу , особенно при позднем (после ) измении иерархии и т.д Визитор лишен этого, так создает законченную матрицу вызовов, но это же является и недостатком, так как для закончености требуется, чтоб были известны все типы и также обладает излишиством, так как у каждой добавляемой операции должна быть реализация пусть хоть пустая, но требующая времени программиста. Но если применение визитора выбрано правильно применительно к задаче, то его преимущества с лихвой окупают недостатки. |
|||
|
||||
fry |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
toxx:
fry:
mes:
Конечно подвержено, однако это не свидетельствует о непродуманности. Во всяком случае четко сказать, что код с dynamic_cast непродуман нельзя. В целом все кодирование подвержено ошибкам (ИМХО люди все же) - что-то больше (dynamic_cast), что-то меньше, однако если руки не из того места или нет опыта и понимания можно любую хорошую (визитор) идею изгадить. |
||||||
|
|||||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
О "не продуманности" свидетельствует то, что взят первый попавшийся, а не максимально подходящий, способ. Сам динамик_кaст тут не при чем. Зависит как он применен. К примеру лестница условий, в которой по очереди идет преобразование к потомку, с окончанием при успешном приведении. Так еще такое для каждой операции (функции) этой иерархии.
Одно дело изгадить, а другое что контроль, который можно было повесить на компилятор, приходится делать вручную. И (не для учебного проекта из 1000 строк) это довольно трудоемкий процесс. Особенно если над проектом работает не один, а группа. |
||||||
|
|||||||
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Согласен со всем. Предложил этот метод потому, что:
1. это, как я понял, как раз и есть "проект из 1000 строк" 2. это просто для понимания 3. ИМХО лучше варианта с константами |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |