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

C++ circular dependency returning by value?

本文关键字:返回 循环 依赖 C++      更新时间:2023-10-16

在C++中通过指针或引用返回时,很容易通过前向声明打破循环依赖关系。但在必须按价值回报的情况下,你该怎么办?

考虑下面的简化示例

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

有什么方法可以打破循环依赖关系吗?尝试转发声明Bar只会导致对不完整返回类型的投诉。

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

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