У меня есть устаревший код:
struct Iface1
{
virtual ~Iface1() {}
virtual void foo(const int arg1) const = 0;
};
struct Iface2
{
virtual ~Iface2() {}
virtual void foo(const int arg1, const int arg2) const = 0;
};
/// Composite interface
struct Iface12 : Iface1, Iface2
{
};
Мне нужно создать декоратор для составного интерфейса. Следующий код даже не компилируется, поскольку для G ++ и MSVC «неоднозначно» определить, какой тип вызывается foo (). Не мог бы кто-нибудь указать мне, как заставить код ниже скомпилироваться и работать? (к сожалению, у меня нет времени на рефакторинг.)
И я даже не понимаю, почему компилятор не может определить, какую функцию вызвать, поскольку все сигнатуры функций явные. Спасибо.
struct IfaceDecorator : Iface12
{
IfaceDecorator(Iface12& iface) : impl(iface) {}
virtual void foo(const int arg1) const
{
impl.foo(arg1);
}
virtual void foo(const int arg1, const int arg2) const
{
impl.foo(arg1, arg2);
}
private:
Iface12& impl;
};