gpt4 book ai didi

c++ - 多重继承,继承一个接口(interface)和一个实现

转载 作者:行者123 更新时间:2023-11-30 04:13:36 28 4
gpt4 key购买 nike

是否可以在同一个类中同时继承接口(interface)和实现混入?像这样:

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();

其思路是通过继承Component实现MyClass中继承Interface的纯虚函数。这不编译;我需要这样做:

class MyClass : public Interface, public Component
{
public:
void method(){Component::method();} override
};

是否有可能以某种方式避免对组件的显式覆盖和委托(delegate),也许可以通过某种方式使用模板?

最佳答案

如果你想避免对组件的显式覆盖和委托(delegate),就没有办法继承某种执行此绑定(bind)的接口(interface)派生类,因为你想调用的内容必须在派生类的 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

我试图找到更好的使用模板的方法,但我认为没有一种方法可以将组件方法绑定(bind)到虚拟方法,而无需让组件从接口(interface)继承,或者不必手动编写绑定(bind)代码.

关于c++ - 多重继承,继承一个接口(interface)和一个实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com