我的代码中有一个相对复杂的接口,并且希望将部分实现委托给另一个类,而不需要在实现中编写大量的转发函数.请参阅此简化示例代码:
#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派生.我想了解是否可以委派功能而无需从接口派生委托.)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |