在C ++中通过指针或引用返回时,很容易通过前向声明来破坏循环依赖。但是,如果你必须按价值返回,你会这样做吗?
考虑下面的简化示例
struct Foo {
Bar bar() {return Bar{*this}; }
};
struct Bar {
Foo foo;
}
有没有办法打破循环依赖?试图转发声明Bar只会导致对不完整的退货类型的投诉。
答案 0 :(得分:7)
定义两种类型,声明其成员函数。然后在类外定义成员函数,甚至在第二个类定义之后定义。
struct Bar;
struct Foo {
Bar bar();
};
struct Bar {
Foo foo;
};
Bar Foo::bar() {return Bar{*this}; }