c++ - 多个对象联网的问题

标签 c++ reference circular-dependency

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

struct Computer {
 std::vector<Wire *> wires;
};

struct Wire {
 Computer * computers[2];
};

假设现在我有一个计算机类,并且想要对它通过电线连接到的所有计算机执行一些操作。我可以循环所有电线并在电线中设置一个方法,以便计算机执行以下操作:

wire->doSomething(this,blahblah)

因此线路找到另一台计算机,遍历其线路列表,然后执行相同的操作:

otherWire->doSomething(&otherComputer,blahblah)

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

这是可行的,但是当存在循环链接时,它会创建一个连续调用所有球的 doSomething 的无限循环。防止这种情况的最佳方法是什么,或者是否有更好的整体解决方案来解决此问题?

最佳答案

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

通常,您希望对每个节点使用“visited”属性,然后在访问每个节点之前检查它是否尚未被访问过。

在半伪代码中,你会这样做:

std::map<Wire*,bool> visited; // Outside the search, so that it's not local 

if (!visited[otherWire]) {
  visited[otherWire] = true;
  otherWire->doSomething(&otherComputer,blahblah)
}

关于c++ - 多个对象联网的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9706534/

相关文章:

c# - 如何像在 C++ 中一样在 C# 中创建引用成员变量

C++:外部对象循环引用

c++ - 四元数的标准位置?

c++ - 为什么右值不能绑定(bind)左值引用?

c++ - 在 C++ 中实现分数类型的最佳方法是什么?

c++ - 常量之间的区别。指针和引用?

c# - 依赖注入(inject)循环依赖.NET Core 2.0

c++ - 复杂的循环依赖

c++ - 重新排序原子读取

c++ - 代码 (C++) 到论坛的 html 转换器