是否可以在同一个类中继承接口和实现mixin?像这样:
class Interface
{
public:
virtual void method()=0;
};
class Component
{
public:
void method(){ /*do something*/};
};
class MyClass : public Interface, public Component
{};
...
...
Interface* p = new MyClass(); p.method();
这个想法是继承自Interface的纯虚函数是通过它的继承Component在MyClass中实现的。这不编译;我需要这样做:
class MyClass : public Interface, public Component
{
public:
void method(){Component::method();} override
};
是否有可能以某种方式避免显式覆盖和委托给Component,也许是以某种方式使用模板?
答案 0 :(得分:2)
如果你想避免对组件进行显式覆盖和委托,那么就无法继承某种类型的接口派生类来进行这种绑定,因为你想要调用ahas的东西最终会出现在你的派生类中#& 39; s vtable。
我想你可以使用类似钻石的继承结构和虚拟继承来实现它,但它并不完全漂亮:
class Interface
{
public:
virtual void method()=0;
};
class Component: virtual public Interface
{
public:
virtual void method(){ /*do something*/};
};
class MyClass : virtual public Interface, private Component
{
public:
using Component::method;
};
常用免责声明:虚拟继承为expensive
我试图使用模板找到更好的东西,但我不认为有一种方法可以将组件方法绑定到虚方法,而无需从接口继承组件,或者不必手工编写绑定代码。