Например, у меня есть два класса
class Foo;
class Bar;
class Foo {
const Bar &m_bar;
...
};
class Bar {
const Foo &m_foo;
...
};
Позволять foo
является объектом Foo
а также bar
является объектом Bar
, Есть ли способ (нормальный или «взлом») для создания / инициализации foo
а также bar
что их члены m_bar
а также m_foo
будет ссылаться друг на друга (я имею в виду foo.m_bar
является bar
а также bar.m_foo
такое ‘foo’)?
Разрешено добавлять любых участников Foo
а также Bar
, чтобы добавить родителей для них, чтобы они сделали шаблоны и так далее.
Что такое связь foo
а также bar
? Если у них есть внешний
связь, вы можете написать что-то вроде:
extern Foo foo;
extern Bar bar;
Foo foo( bar );
Bar bar( foo );
(Я предполагаю, что это конструкторы, которые устанавливают
ссылка на параметр.)
Конечно, это предполагает область имен и статическое время жизни.
(но анонимное пространство имен в порядке).
Если они являются членами класса, проблем тоже нет:
class Together
{
Foo foo;
Bar bar;
public:
Together() : foo( bar ), bar( foo ) {}
};
Если они локальные переменные (без привязки), я не думаю, что есть
решение.
На самом деле, локальные переменные имеют простое решение: просто
определить локальный класс, который имеет их в качестве членов, и использовать его.
Это не может работать, если я правильно понимаю вашу проблему, так как для создания панели объектов вам нужен Foo и наоборот.
Вы не должны использовать ссылки, а указатель вместо этого. Где вы можете создать оба объекта отдельно, а затем установить Bar в Foo и Foo в Bar.
class Foo
{
public:
Foo();
void setBar( const Bar* bar ){ _bar = bar; }
private:
const Bar* _bar;
}
// class Bar analog to Foovoid xxx:something(void)
{
Foo* f = new Foo;
Bar* b = nee Bar;
f->setBar(b);
b->setBar(f);
...
}