存储用于事件侦听器注册的指针
store pointer to use for event listener registration
我有一个我正在编写的c ++(c ++ 11(库(OpenGL图形引擎(。
我的问题围绕着注册事件侦听器的良好编程技术。
我有这样的类关系:
Program
--has--> SceneManager
--has--> ShaderManager
--has-->* Shader
Shader
类允许其他对象将自己注册为ShaderBindListener
,这意味着每当着色器调用它bind()
方法时,它都会通知任何侦听器。
ShaderManager
类是外部库可以访问的类,外部库可以从中创建新的Shader
对象。
现在,我希望每个Shader
对象都将Program
对象作为ShaderBindListener
,以便在绑定Shader
时,Program
对象会收到通知,并且可以将矩阵数据等传递给GPU上的Shader
。
我最初的解决方案是让Program
对象将指向自身的指针传递给SceneManager
,将指针传递给ShaderManager
,然后存储它。 每当创建新Shader
时,ShaderManager
都会将Program
添加为侦听器。
这工作得很好 - 但似乎 - 我不知道,在设计方面有点错误。
也许我只是迂腐 - 但这对你们来说似乎是很好的设计吗?
有几个选项,其优缺点通常值得商榷,取决于您的风格。
单身 人士
如果一个进程只有一个Program
实例,那么你可以使Program
成为单例。这样,您无需传递指针。
中间对象
您可以让它通过一个封装Program
并管理其事件处理的对象,而不是传递this
指针。这样,其他类不需要知道Program
,它们只需要事件类的接口。
事实上,如果你不反对使用Boost,那么他们正好有你想要的东西:Signals2库。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- 如何将不同的成员函数指针分配给注册类的不同实例?
- USACO 牛障碍赛:迪尼克的算法/对指针未注册的更改
- 共享指针和回调注册的结构.由于我之外的原因调用回调时,原始指针值发生了变化
- ISR中使用的指针指向注册
- Boost几何体将点2d注册为共享指针
- 没有为c++类函数指针注册python类
- 存储用于事件侦听器注册的指针
- 在luabind中返回指向派生对象的指针时出现泄漏或"未注册类"的问题
- 正在获取指向已注册QML类型的指针
- 自动注册对象以列出存储共享指针