Агрегирование
От: s.ts  
Дата: 30.01.08 20:11
Оценка:
Привет всем.

В предыдущем посте ошибка, потому заново.

Есть такой код:


struct iface
{
  virtual void method1() =0;
...
  virtual void method50() =0;
  virtual ~iface(){}
};

class ext: public iface
{
  iface* ptr;

public:
  explicit ext(iface* a_ptr): ptr(a_ptr) {}
  void method1() {ptr->method1();};
...
  void method50() {ptr->method50();};
};

iface* convert(iface* impl)
{
  return new ext(impl);
}




Т.е. имеется интерфейс iface.
Мы получаем (в функции convert) объект, который некоторым образом этот интерфейс реализовывает.
Cлегка изменяем его поведение, используя агрегирование.
При этом приходится тривиальным образом переопределять методы iface в классе ext просто как вызовы агрегированного объекта.

Вопрос.
Можно ли как-нибудь изменить этот код так, чтобы не пришлось во 2-й раз перечислять виртуальные методы iface в классе ext?

При этом.
Методы интерфейса iface могут иметь различное число параметров и типы возвращаемых значений.Мы можем изменять iface, но при этом должны сохраниться все существующие свойства кода, как, например, проверка попыток инстанцирования абстрактных классов, динамический полиморфизм и т.д.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.