簡體   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