2014-01-24 172 views
1

我该如何在C++中进行这种派生? (目前的例子不起作用)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

什么是你的编译器告诉你吗?我认为它比“它不工作”说得更多 – undu

回答

6

返回类型的协方差仅适用于指针和引用,这应该工作:

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; 
}; 
+0

太棒了!现在,我可以用shared_ptr而不是常规指针来做到这一点吗? – Adibe7

+0

@ Adibe7不直接,没有。但是,您可以使当前的'BuildPresenter'受到保护,并创建一个调用'BuildPresenter'的公共'BuildPresenterShared',将指针包装在'shared_ptr'中并返回(它不需要是虚拟的)。尽管这对于层次结构中的每个类都必须完成。 –