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

C++ circular dependency returning by value?

当return在 C++ 中通过指针或引用调用时,很容易通过前向声明打破循环依赖。但是在必须按值 return 的情况下,你会怎么做?

考虑下面的简化示例

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

struct Bar {
  Foo foo;
}

有没有办法打破循环依赖?尝试转发 declare Bar 只会导致有关不完整 return 类型的投诉。

定义两个类型,声明它们的成员函数。然后定义class之外的成员函数,甚至在第二个class定义之后。

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

struct Bar {
  Foo foo;
};

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