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++接口继承的主要内容,如果未能解决你的问题,请参考以下文章

C++接口继承

带有接口的 C++ 多重继承?

C++中的接口继承

c++ COM接口继承

C++ 中的继承和接口

接口讲解