Скажем, у меня есть класс объектов, называемый Computer
. Тогда скажите, что у меня есть другой класс под названием Wire
. (Эти названия используются, чтобы просто объяснить, что я пытаюсь сделать, настоящие немного сложнее)Проблема создания сетевых объектов
struct Computer {
std::vector<Wire *> wires;
};
struct Wire {
Computer * computers[2];
};
Так скажем, теперь у меня есть класс компьютера, и вы хотите сделать что-то для всех компьютеров он подключается через провода. Я мог бы петлю через все провода и иметь метод в проводе, так что компьютер делает:
wire->doSomething(this,blahblah)
поэтому провод находит другой компьютер, проходит через список проводов, и делает то же самое:
otherWire->doSomething(&otherComputer,blahblah)
(конечно, он пропускает, когда попадает в список).
Это работает, но когда есть круговая связь, он создает бесконечный цикл вызова doSomething
всем шарам, непрерывно. Каков наилучший способ предотвратить это, или есть лучшее общее решение этой проблемы?
* Помимо *: реальные сети имеют [та же проблема] (http://en.wikipedia.org/wiki/Bridge_loop), хотя они [решают это по-другому] (http://en.wikipedia.org/wiki/Spanning_tree_protocol). –