[英]Problems with QObject multiple inheritance and policy/traits design in C++
我在业余时间正在构建一个相当大的插件驱动的应用程序,并且遇到了显示停止设计缺陷的情况。 我的应用程序使用基于策略/特征的设计,但是因为我使用Qt,所以它仅通过MI(而不是模板和MI)完成。 这些类中的一些是纯虚拟的,而某些类在最终用户永远不应接触的幕后执行相当关键的功能。
我的问题是这些类中的某些类需要信号/插槽,因此是从QObject派生的,我可以从该对象继承而来几乎没有问题。 但是,我遇到的问题是,当我想从Qt类派生然后用我的一个或多个特征扩展它时,例如:
class Sy_abstractGLViewport : public QGLWidget, public Sy_saveable, public Sy_abstractObject
{
...
}
这里的QGLWidget是从QObject派生的,但实际上不是从QObject派生的,从而引起歧义问题。
我考虑过一种桥接模式,在该模式中,我制作了Sy_saveable
纯虚拟对象,然后从其中导出包含实际实现的Sy_saveable_imp
。 然后通过聚合将其用于我的Sy_abstractGLViewport
。
在我看来,这不是很专业,因为该应用程序是基于插件的,对于我将来的插件编写者来说,将所有接口方法“连接”到聚合实例上有点像PITA。 我什至无法通过宏将其自动化,因为最终用户可能想覆盖方法。
有没有人可以解决这个问题的模式? 还是不需要MI但给我同样灵活性的模式? 这是我个人的业余爱好项目,我不介意进行大量重构-我想做正确的事 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.