将多个对象联网的问题

The issue of networking multiple objects

本文关键字:问题 对象      更新时间:2023-10-16

假设我有一个对象类,称为Computer。然后说我有另一个课叫Wire。(这些名字只是用来简单地解释我想做什么;真正的名字有点复杂)

struct Computer {
 std::vector<Wire *> wires;
};
struct Wire {
 Computer * computers[2];
};

比方说,现在我有一个计算机课,我想对所有通过电线连接的计算机做点什么。我可以绕过所有的电线,并在电线中有一个方法,这样计算机就可以做到:

wire->doSomething(this,blahblah)

因此,连线找到另一台计算机,浏览它的连线列表,并做同样的事情:

otherWire->doSomething(&otherComputer,blahblah)

(当然,当它发现自己在列表中时,它会跳过)。

这是有效的,但当有一个圆形链接时,它会创建一个无限循环,连续地向所有球调用doSomething。防止这种情况的最佳方法是什么,或者有更好的整体解决方案吗?

您得到的是一个有向的循环图。

通常,您希望为每个节点使用一个"已访问"属性,然后在访问每个节点之前检查它是否尚未被访问。

在半伪代码中:

std::map<Wire*,bool> visited; // Outside the search, so that it's not local 
if (!visited[otherWire]) {
  visited[otherWire] = true;
  otherWire->doSomething(&otherComputer,blahblah)
}