c – 单身人士的替代方案

c – 单身人士的替代方案,第1张

概述我有一个非常简单的游戏引擎.它使用了几个单例(我会列举其中的一些). Resource ManagerRender EngineEvents ManagerFactoryetc 这些单身人士从一个到另一个有很多电话.我将采用事件管理器示例用法: >从Listener派生的任何对象都可以将itsel添加为某些事件的侦听器,就像这个EventsManager-> RegisterListene 我有一个非常简单的游戏引擎.它使用了几个单例(我会列举其中的一些).
Resource ManagerRender EngineEvents ManagerFactoryetc

这些单身人士从一个到另一个有很多电话.我将采用事件管理器示例用法:

>从Listener派生的任何对象都可以将itsel添加为某些事件的侦听器,就像这个EventsManager-> RegisterListener(this,& SomeClass :: SomeMethod); (事件类型由SomeMethod参数推导)
>任何其他对象都可以触发像这样的事件EventsManager-> PushEvent(SomeEvent);

在一些同步之后,事件将到达所有侦听器.当EventsManager是singleton时,这是一个非常简单的用法.

类似的行为与其他单身人士有关.我想删除单例,但我的主要问题是我想从现在的“用户观点”保持代码简单易用.我阅读了一些这样做的技巧,但大多数使类的初始化/使用更加复杂.我知道这个主题在SO上被多次讨论,但没有答案适合我的编程理念 – 尽可能保持一切尽可能简单.

我不希望我的类有复杂的定义/初始化,如:

SomeClass<EventManager,RenderEngine,...>

要么

SomeClass::SomeClass(EventsManager,RenderEngine...)

你能就这个话题给我一些建议吗?

解决方法 您可以拥有一个全局“游戏”对象,该对象可以创建当前单例类的每个类的实例

对于EventManager的具体示例;您的Listener基类可以提供寄存器方法和派生类可以调用的push方法的实现.

骨架定义:

class Listener{public:    virtual voID ReceiveMessage( ... ) = 0;protected:    voID Register()    {        GetEventManagerSomehow()->RegisterListener( this,etc );    }    voID PushEvent( etc )    {        GetEventManagerSomehow()->PushEvent( etc );    }}
总结

以上是内存溢出为你收集整理的c – 单身人士的替代方案全部内容,希望文章能够帮你解决c – 单身人士的替代方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1244199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存