C++接口继承
Posted
技术标签:
【中文标题】C++接口继承【英文标题】:C++ interface inheritance 【发布时间】:2014-01-24 13:32:40 【问题描述】:如何在 C++ 中进行这种推导? (当前示例不起作用)
struct IB
;
struct IDerivedB : public IB
;
struct IA
public:
virtual IB Foo(const string& type) = 0;
;
struct IDerivedA : public IA
public:
virtual IDerivedB Foo(const string& type) override = 0;
;
谢谢!
【问题讨论】:
你的编译器告诉你什么?我认为它说的不仅仅是“它不起作用” 【参考方案1】:返回类型协方差仅适用于指针和引用,这应该有效:
struct IB
;
struct IDerivedB : public IB
;
struct IA
public:
virtual IB* BuildPresenter(const string& type) = 0;
;
struct IDerivedA : public IA
public:
virtual IDerivedB* BuildPresenter(const string& type) override = 0;
;
【讨论】:
太棒了!这是有道理的,现在,我可以用 shared_ptr 而不是常规指针来做吗? @Adibe7 不直接,不。但是您可以将当前的BuildPresenter
设为受保护,并创建一个调用BuildPresenter
的公共BuildPresenterShared
,将指针包装在shared_ptr
中并返回它(它不必是虚拟的)。但是,必须对层次结构中的每个类都执行此操作。以上是关于C++接口继承的主要内容,如果未能解决你的问题,请参考以下文章