我有81个名为Square的对象位于另一个称为Puzzle的对象中的二维数组中。我想让它在一个单独的Square对象中触发某个函数时,会在其相应的Puzzle对象中触发一个函数。你会如何建议去做?它甚至有可能吗?如何获取成员对象以通知其容器对象?
回答
最简单的方法做到这一点,而无需修改Square
和Puzzle
类是封装两者Square
方法调用和函数的Puzzle
触发代码。 A(有点做作)的例子是:
void GoUp(Square& sq, Puzzle& pz) {
sq.GoUp();
pz.NotifySquareGoUp(sq);
}
现在需要调用GoUp()
方形物体和通知拼图对象的任何代码,只需要调用的函数。
您试图实现的内容可以通过实施“观察者模式”来完成。您的拼图对象将注册Square对象中的事件。 Square对象在状态改变时通知拼图。以下链接将帮助您弄清楚如何做到这一切。
http://www.codeproject.com/Articles/328365/Understanding-and-Implementing-Observer-Pattern-in
我其实已经开放了一下,另一位朋友推荐了一样。但是,他给出的示例代码中提供的情况与我目前的情况不太吻合。在他的代码中,'Shop'对象是观察者,它是'DummyProduct'类继承的'ASubject'类的成员。在我的系统中,我希望'Puzzle'类是观察者,'Square'类是主题,这使得事情变得复杂,因为'Puzzle'具有一个Square,但Square不具有' Puzzle'。 –
这个想法是以这样一种方式编写通知函数,以便它可以帮助您识别唯一方形的参数。 Square广场>的addObserver(猜谜) 在广场: 功能通知(){ 对(INT I = 0; I
你的意思是回调函数?
您可以存储一个指针或引用到Square中,当Square的某个函数被调用时,您可以通过指针/引用来做些事情。
- 1. 如何在容器对象中使用XMLSerialize成员对象
- 2. 如何通过其uid获取对象?
- 3. linq to sql获取所有对象及其容器对象
- 4. 其成员过滤对象
- 5. Vaadin:表容器有对象成员
- 6. python获取COM ole对象的成员
- 7. 获取对象与广场的成员
- 8. C#获取Generic对象的成员
- 9. 从其他对象中获取对象
- 10. 如何通知对象?
- 11. 如何用C++中的其他成员替换成员对象
- 12. C#获取通用对象的对象
- 13. 通知对象
- 14. 如何从对象链获取对象
- 15. 如何从CheckboxTreeViewer获取对象/对象?
- 16. 如何获取对象内的对象?
- 17. 如何获取ngResource查询的内容[对象对象]
- 18. 使用反射(或其他方式)获取成员对象
- 19. 如何在ruby中获取其对象的原型对象?
- 20. 如何搜索一个数据成员值的对象容器?
- 21. 实例化对象和对象成员
- 22. Javascript对象 - 获取内容
- 23. 通过变量获取对象成员的值
- 24. 过滤不是其他对象成员的对象
- 25. 获取带砌体对象的容器
- 26. 在python中获取容器/父对象
- 27. 如何通过propel对象集合中的“id”获取对象?
- 28. 如何按顺序获取对象中的成员类型?
- 29. 如何获取调用expando对象的成员名称?
- 30. 如何从对象中获取成员名称?
你可以传递给父母'Puzzle'的引用给每个对象,让他们调用函数。或者你可以让调用者调用Puzzle对象的函数,也可以调用网格位置,所以'Puzzle'对象可以调用右边的'Square'函数。或者你可以变得很花哨,并且使用['Boost.Signals'](http://www.boost.org/doc/html/signals.html)等方式将消息从“Square”传递给订阅的任何对象被通知。 – Praetorian
对于您发布的第二种可能的解决方案:在另一个调用内的对象将如何作为外部对象的成员函数?我确实为每个“Square”记录了一个网格位置,因为我看到过类似的问题,并试图从中收集解决方案。但是我没有找到一个。 我真的认为你的第一个解决方案是最好的,但我想尽可能地使用尽可能少的指针,所以我欢迎其他解决方案。一个人可以做梦... –
我想你误解了我的第二个建议。而不是拥有任何你现在调用'Square'成员函数的函数,而是让该函数调用'Puzzle'的成员函数。如果调用者也通过网格位置,则“Puzzle”可以调用正确的“Square”的成员函数。 – Praetorian