![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Доброго времени всем. Изучая данный паттерн по одному из примеров получил код (шаблонная фабрика)
на что получаю ошибку о том, что error C2440: 'initializing' : cannot convert from 'Car *' to 'Honda *' И в общем то оно и понятно. А как тогда создают объекты? Или для создания нельзя делать шаблонную фабрику, а нужно делать фабрику для каждого конкретного вида машины (в моей случае)? |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Тут конечно можно использовать привидение в стиле dynamic_cast, но это ведь вроде тоже не есть очень хорошо
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
dynamic_cast у тебя работать не будет, так как класс Car не виртуальный (нужен хотя бы один виртуальный метод, в первую очередь деструктор).
можно использовать static_cast, но только в том случае, если ты АБСОЛЮТНО УВЕРЕН в совместимости указателей (другими словами, если ты проверил соответствие перед преобразованием). |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Про деструктор я знаю. Допустим он там все-таки есть =)) Вопрос при этом остается. Dynamic_cast только поможет в таком случае?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
xTr1m, ты полностью мое сообщение прочитал или только про виртуальный деструктор?
|
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Ну дело не в применении "*_cast", меня больше интересует сам подход. Хорошо задам вопрос по-другому, как создают разные объекты (отнаследованные от одного конечно) при помощи шаблонной фабрики (кроме как через cast)?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
xTr1m, без каста никак нельзя.. плохо когда каст разбросан по коду, а если в одном месте сгрупирован, то все ок
Добавлено через 4 минуты и 18 секунд xTr1m, у вас в примере идет отражение типа на интегральное значение.. и в последствии создание объекта по значению.. система типов "нарушена" (точнее) Вы с вашей фабрикой взяли на себя ответсвенность за соблюдение типосовместимости и _cast Вам в помощь.. Добавлено через 7 минут и 11 секунд алсо слабым местом в вашем паттерне является не сам каст, а безконтрольная типозависимость..
Добавлено через 8 минут и 10 секунд т.е. непонятно откуда взявшаяся связь между значениями и типами, позволяющая легко ошибится и трудно найти ошибку.. |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Понял. Хотя как каст будет в одном месте не понятно. Ведь Create может вызываться из разных мест. Или тут уже другие трюки идут в ход?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
оффтопик, в этом месте по логике класс должен называться просто CFactory, ибо берет простого креатора и шаблоный параметр класса который будет создавать.. Добавлено через 37 секунд да другие, оррганизация зависимости значения от типа.. |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Да, тут уже торопился. Большое спасибо.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот на скорую руку :
http://liveworkspace.org/code/d1bef0c41a01...4472282f77edda5 Добавлено через 9 минут и 11 секунд что при легком допиливании превращается в : http://liveworkspace.org/code/0895c4ad8770...39818453ecae50f |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |