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

Ant*_*ony 3 c++ circular-dependency forward-declaration

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

考虑下面的简化示例

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

struct Bar {
  Foo foo;
}
Run Code Online (Sandbox Code Playgroud)

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

MSa*_*ers 8

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

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

struct Bar {
  Foo foo;
};

Bar Foo::bar() {return Bar{*this}; }
Run Code Online (Sandbox Code Playgroud)