我有一個遺留代碼:方法超載而繼承在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;
};
你應該發佈你正在得到的確切的錯誤。 – 2011-05-29 09:10:54