将接口的一部分委托给C++中的子类?

tbl*_*her 5 c++

我的代码中有一个相对复杂的接口,并且希望将部分实现委托给另一个类,而不需要在实现中编写大量的转发函数.请参阅此简化示例代码:

#include <stdio.h>

struct Interface {
    virtual void foo() = 0;
    virtual void bar() = 0;
    virtual ~Interface() {}
};

struct Delegate {
    virtual void foo()
    { printf("foo\n"); }
};


struct Impl : public Interface, private Delegate {
    // delegate foo to Delegate
    using Delegate::foo;

    void bar()
    { printf("bar\n"); }
};

int main() {
    Interface* i = new Impl();
    i->foo();
    i->bar();
    delete i;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在G ++抱怨foo没有在Impl中实现.然而,在Impl中有一个完美的函数foo,它只是从另一个父类中获取.为什么编译器不能正确填写vtable?

(注意:我知道在这个特定的例子中,Delegate可以从Interface派生.我想了解是否可以委派功能而无需从接口派生委托.)