繁体   English   中英

C ++:从基类和具有通用基接口的多个接口继承

[英]C++: inherit from both base class and multiple interfaces with common base interface

这是我的类层次结构(简要):

struct block_i
{
  virtual ~block_i() = default;
  virtual bool is_done() const = 0;
  //...
};
template<class T>
struct consumer_block_i : public block_i
{
  virtual void register_producer(producer_block_i<T>&) = 0;
  //...
};
template<class T>
struct action_block : public consumer_block_i<T>
{
  virtual void register_producer(producer_block_i<T>&) override {}
  //...
};

它有效(我相信)。

block_iconsumer_block_i是纯虚拟接口。 我想让主题保持纯虚拟。 有多个用户端块(例如action_blocktransform_block ),它们共享许多代码,我想将此类通用代码放入基类(例如, block_base )。

这是我在C#中想要的:

interface IBlock
{
    bool IsDone();
}

interface IProducer : IBlock
{
    void RegisterConsumer(IConsumer producer);
}

interface IConsumer : IBlock
{
    void RegisterProducer(IProducer producer);
}

class BlockBase : IBlock
{
    public bool IsDone() { return false; }
}

class Consumer : BlockBase, IConsumer
{
    private IProducer producer_;

    public void RegisterProducer(IProducer producer) { producer_ = producer; }
}

在C ++中,我不能完全像在C#中那样。 如果我尝试从block_baseconsumer_block_i (它们具有通用的纯虚拟接口)继承,那么我将收到编译错误。

struct block_base : public block_i
{
  virtual bool is_done() const override { return false; }
};

template<class T>
class action_block 
  : public virtual block_base
  , public virtual consumer_block_i<T>
{
  virtual void register_producer(producer_block_i<T>&) override {}
  //...
};

错误C2259'cppdf :: action_block':无法实例化抽象类

我该如何实现(我的意思是同时使用纯虚拟接口和基类)? 也许我需要审查我的架构? 谢谢。

block_i被继承两次。

  1. action_block:public block_base,此处is_done已实现。
  2. action_block:public Consumer_block_i,此处is_done未实现! 并且其他基类的实现是无法实现的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM