![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| iiizxc |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 13.11.2008 Репутация: нет Всего: нет |
Имеется следующий дизайн:
Объект Object является композицией имплементаций интерфейсов ISome и IAnother, однако сам как интерфейс не позволяет воспользоваться методами ISome и IAnother.
Тем не менее, Object позволяет перекастовать себя к интерфейсу ISome или IAnother (public наследование), и таким образом получить доступ к соответствующим методам.
Проблема в том, что количество методов ISome или IAnother может быть большим и список этих методов может меняться. Необходимо же все метоты и поля этих интерфейсов сделать private в Object. Так, объявление вроде
серьезно бы упростило код, и сделало его более читабельным. Но ни такого варианта, ни подобных стандарт не поддерживает. Вопрос: можно ли все-таки как-то добиться желаемого? Приватное наследование и перегрузка перекастовки - это не то. |
||||||||
|
|||||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не делать Object наследником этих интерфейсов, а агрегировать их имплементации
при необходимости добавить или функции типа ISome* ToSome() или вообще операторы преобразования а-ля operator ISome&() (хотя особого смысла в операторе не вижу) лучше всего сделать проксю
Добавлено через 1 минуту и 50 секунд но решение настолько корявое, что возникает вопрос - а зачем эти извращения нужны? в чем задача заключается? |
|||
|
||||
| iiizxc |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 13.11.2008 Репутация: нет Всего: нет |
Alek86, нет, агрегация с делегированием перекастовки - это тоже не то. Не спрашивайте, зачем это понадобилось
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
чем именно не нравится?
(кстати, сложно отвечать на твой вопрос, не зная всей "обстановки") имхо, в общем случае мой вариант получше кучи юзингов, которые не контролируются компилятором (то есть добавишь паблик в ISome - он молча появится в пабликах Object'а) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |