C ++循环依赖按值返回?

时间:2016-05-10 00:12:54

标签: c++ circular-dependency forward-declaration

在C ++中通过指针或引用返回时,很容易通过前向声明来破坏循环依赖。但是,如果你必须按价值返回,你会这样做吗?

考虑下面的简化示例

struct Foo {
  Bar bar() {return Bar{*this}; }
};

struct Bar {
  Foo foo;
}

有没有办法打破循环依赖?试图转发声明Bar只会导致对不完整的退货类型的投诉。

1 个答案:

答案 0 :(得分:7)

定义两种类型,声明其成员函数。然后在类外定义成员函数,甚至在第二个类定义之后定义。

struct Bar;
struct Foo {
  Bar bar();
};

struct Bar {
  Foo foo;
};

Bar Foo::bar() {return Bar{*this}; }