如何初始化const循环引用成员

Loo*_*oom 6 c++ initialization circular-dependency circular-reference member-initialization

例如,我有两个班

class Foo;
class Bar;

class Foo {
  const Bar &m_bar;
  ...
};

class Bar {
  const Foo &m_foo;
  ...
};
Run Code Online (Sandbox Code Playgroud)

让我们foo为对象Foobar为对象Bar.有什么办法(正常或"黑客")创建/初始化foobar其成员m_bar,并m_foo会互相引用(我的意思foo.m_barbarbar.m_foo是"富")?

允许添加任何成员,FooBar为其添加父项,以使其成为模板等.

Jam*_*nze 6

什么是foobar?的联系?如果他们有外部链接,你可以写如下:

extern Foo foo;
extern Bar bar;

Foo foo( bar );
Bar bar( foo );
Run Code Online (Sandbox Code Playgroud)

(我在这里假设它是构造函数,它设置了对参数的引用.)

当然,这假定了命名空间范围和静态生命周期(但是匿名命名空间很好).

如果他们是班级成员,也没有问题:

class Together
{
    Foo foo;
    Bar bar;
public:
    Together() : foo( bar ), bar( foo ) {}
};
Run Code Online (Sandbox Code Playgroud)

如果它们是局部变量(没有约束力),我认为没有解决方案.

编辑:

实际上,局部变量有一个简单的解决方案:只需定义一个将它们作为成员的本地类,然后使用它.