【问题标题】:C++ circular dependency returning by value?C ++循环依赖按值返回?
【发布时间】:2016-05-10 00:12:53
【问题描述】:

在 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};}

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


【解决方案1】:

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

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

struct Bar {
  Foo foo;
};

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

【讨论】:

  • 现在我觉得自己很傻。我对错误消息感到困惑,并认为问题出在返回类型上,而不是内联定义。
  • 真的是返回语句需要copy ctor。
猜你喜欢
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2013-02-04
  • 2019-04-03
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多