| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > using-declaration |
| Автор: iiizxc 2.3.2009, 16:55 | ||||||||
Имеется следующий дизайн:
Объект Object является композицией имплементаций интерфейсов ISome и IAnother, однако сам как интерфейс не позволяет воспользоваться методами ISome и IAnother.
Тем не менее, Object позволяет перекастовать себя к интерфейсу ISome или IAnother (public наследование), и таким образом получить доступ к соответствующим методам.
Проблема в том, что количество методов ISome или IAnother может быть большим и список этих методов может меняться. Необходимо же все метоты и поля этих интерфейсов сделать private в Object. Так, объявление вроде
серьезно бы упростило код, и сделало его более читабельным. Но ни такого варианта, ни подобных стандарт не поддерживает. Вопрос: можно ли все-таки как-то добиться желаемого? Приватное наследование и перегрузка перекастовки - это не то. |
| Автор: Alek86 2.3.2009, 17:09 | ||
| не делать Object наследником этих интерфейсов, а агрегировать их имплементации при необходимости добавить или функции типа ISome* ToSome() или вообще операторы преобразования а-ля operator ISome&() (хотя особого смысла в операторе не вижу) лучше всего сделать проксю
Добавлено через 1 минуту и 50 секунд но решение настолько корявое, что возникает вопрос - а зачем эти извращения нужны? в чем задача заключается? |
| Автор: iiizxc 2.3.2009, 17:19 |
| Alek86, нет, агрегация с делегированием перекастовки - это тоже не то. Не спрашивайте, зачем это понадобилось |
| Автор: Alek86 2.3.2009, 17:42 |
| чем именно не нравится? (кстати, сложно отвечать на твой вопрос, не зная всей "обстановки") имхо, в общем случае мой вариант получше кучи юзингов, которые не контролируются компилятором (то есть добавишь паблик в ISome - он молча появится в пабликах Object'а) |