bar*_*kin 7 c++ inheritance overloading
我有遗留代码:
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
{
};
Run Code Online (Sandbox Code Playgroud)
我需要为复合接口创建一个装饰器.以下代码甚至没有编译,因为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;
};
Run Code Online (Sandbox Code Playgroud)
您需要明确导入foo到Iface12类中,因此您将获得两个重载函数Iface12::foo.
struct Iface12 : Iface1, Iface2
{
using Iface1::foo;
using Iface2::foo;
};
Run Code Online (Sandbox Code Playgroud)
具有相同名称的成员函数只有在同一个类中声明时才会相互重载,如果要重载继承的函数,则需要在当前类中导入名称using ParentClass::functionName.我认为这是最不让人惊讶的原则 - 除非你要求,否则你的会员功能不会超载.