将多个对象联网的问题
The issue of networking multiple objects
假设我有一个对象类,称为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)
}
相关文章:
- 在CToolBar对象中使用PNG时出现问题
- 将父类对象强制转换为子类的问题
- 类对象数组的问题会导致崩溃
- 在C++中遇到对象和类问题
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 在C ++ ASIO中,如何为HTTP或HTTPS创建相同的套接字对象(接口/抽象问题?
- 由于缺少类模板,NVCC 编译面向对象代码时出现问题
- C++删除/(递归)对象销毁问题
- C++ - 面试问题中的堆栈上的对象
- 将四元数旋转的游戏对象旋转另一个四元数时出现问题
- 通过 COM 对象连接 x64 应用程序时出现问题
- 擦除矢量问题矢量中的对象
- 将任意对象附加到数组有什么问题
- 在C++中将类实例添加到对象层次结构中的问题
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- C++ 迭代后销毁对象的问题
- "Extern"对象问题:错误:Id 返回 1 个退出状态
- 将文件从 iOS 应用程序加载到 C++ 对象中/<iostream>iOS 上的问题
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 与 32 位共享对象的链接问题