Привет всем.
В предыдущем посте ошибка, потому заново.
Есть такой код:
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, но при этом должны сохраниться все существующие свойства кода, как, например, проверка попыток инстанцирования абстрактных классов, динамический полиморфизм и т.д.