[英]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_i
和consumer_block_i
是純虛擬接口。 我想讓主題保持純虛擬。 有多個用戶端塊(例如action_block
或transform_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_base
和consumer_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被繼承兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.