Is there a way to forward declare covariance?

后端 未结 4 1551
别跟我提以往
别跟我提以往 2021-02-19 02:02

Suppose I have these abstract classes Foo and Bar:

class Foo;
class Bar;

class Foo
{
public:
  virtual Bar* bar() = 0;
};

class Bar
{         


        
4条回答
  •  没有蜡笔的小新
    2021-02-19 02:22

    How about this.

    template 
    class Foo
    {
    public:
        virtual BarType* bar() = 0;
    };
    
    template 
    class Bar
    {
    public:
        virtual FooType* foo() = 0;
    };
    
    class ConcreteBar;
    class ConcreteFoo : public Foo
    {
    public:
        ConcreteBar* bar();
    };
    
    class ConcreteBar : public Bar
    {
    public:
        ConcreteFoo* foo();
    };
    

提交回复
热议问题