Перегрузка методов при наследовании в C ++

У меня есть устаревший код:

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;
};
7
задан barankin 29 May 2011 в 09:00
поделиться