在MVC设计中避免与c++的循环依赖
Avoiding circular dependancy with C++ in MVC design
我试图实现MVC设计模式在Qt应用程序我正在工作,并想把菜单栏在自己的类派生自QMenuBar(我称之为菜单),而窗口本身是从QMainWindow派生的另一个类(我称之为MainWindow)。为了将菜单栏附加到主窗口,我需要将指向MainWindow的指针传递给menu类。不幸的是,这使得菜单依赖于主窗口,这是我想避免的。
我有点c++的菜鸟,甚至更尊重MVC设计所以,有人知道一个优雅的解决方案,这个问题?在谷歌上搜索了一下,发现向前声明可能解决了我的问题,但我想知道是否有更简单的方法。如果需要的话,我可以提供一些示例代码,但问题的本质是我只想将对ClassA的引用传递给ClassB。
ClassA.cpp
ClassA() : ClassC
{
}
ClassB.cpp
ClassB(ClassA *parent) : ClassD
{
ClassA *my_parent = parent;
}
前向声明是这种事情的优雅解决方案,还是可能有更好的方法?
编辑:对于其他有类似问题的人来说,前向声明很可能是简单情况下的答案。Disch在cpluplus.com上写的这篇文章对我很有帮助:
http://www.cplusplus.com/forum/articles/10627/
以下是我觉得最有用的建议:
有两种基本的依赖你需要知道:可以提前申报的物品2)需要包含的内容例如,如果类A使用类B,那么类B就是类A的一个依赖关系。是否可以前向声明或者是否需要包括在内取决于B如何在A中使用:-如果:A没有提到B,什么都不做-如果:对B的唯一引用是在友元声明中,什么都不做如果A包含B指针或引用,则forward声明B:如果一个或多个函数有B对象/指针/引用,则forward声明BB MyFunction(B myb);如果:B是a的父类,则包含"b.h"- #include "b.h"如果:A包含一个B对象:B myb;你想要做最不激烈的选择。如果可以的话什么都不要做,但是如果如果可以,请提前申报。但如果有必要,那么#include其他的头。
直接包含在头文件中只有在:类的成员不是指针(不要对不重要的类这样做)或者必须创建包含的类的子类时才需要。
在所有其他情况下使用前向声明。这不是一个"大师特性",它是解决不必要依赖的标准方法。
注:如果你问这样的问题,我建议阅读一些关于c++和Qt的入门文献,我不确定,如果子类化Qt类如QMenuBar和QMainWindow以你目前的经验水平是正确的方式。阅读QtCreator文档。检查QML/QtQuick。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串