gpt4 book ai didi

c++ - 帮忙做这个设计

转载 作者:行者123 更新时间:2023-11-28 03:50:16 26 4
gpt4 key购买 nike

现在,在我的游戏 gui API 中,例如,我有一个 MouseListener。

这只是一个带有方法的抽象类。目前,它的使用方式如下:

假设我想要一个 Widget 来接受鼠标监听器:

我创建了一个鼠标监听器 vector ,并提供添加和删除函数来删除监听器。每次事件发生时,该 Widget 将调用所有鼠标监听器的方法(例如:鼠标按下)。

另一方面,您将拥有一个实现 MouseListener 方法的类。

这个系统的唯一问题是,如果 Listener 被销毁,它就无法通知它正在监听的所有内容。

所以我想要一个系统,如果任何一端被破坏,它们都会收到通知并相互移除,就好像它们从未被添加过一样。

我还想这样做,以便每个 Listener(例如:MouseListener)都继承自 Listener,以便任何想要创建更精细的 Listener 类的人都能轻松使用此功能。

如有任何关于设计此类内容的想法,我们将不胜感激。谢谢

一种设计,即非 boost、非 c++0x、非自动垃圾收集、非智能指针……只是普通的旧 C++ 98 标准解决方案。

最佳答案

听者正在听的东西(从现在开始称为发声器)如何了解听者?他们存储一个指针,对吧?

如果是这样,我建议给发声器一个指向听众的弱指针。一旦监听器析构,弱指针将不再有效,因此当发声器尝试通知监听器时,它会看到并可以从其要通知的事物列表中删除指针。

同样的方法也可以用另一种方式完成(听众可以存储发声器的弱指针,虽然我不明白你为什么需要这个)。

您可以实现自己的弱指针和强指针,或者您可以使用 c++0x 标准库中的那些(gcc 和 vc++10 可用)

关于c++ - 帮忙做这个设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5778907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com