Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;?_C++_Dependency Injection - Fatal编程技术网

C++ 如何在C++;?

C++ 如何在C++;?,c++,dependency-injection,C++,Dependency Injection,我正在创建一个MVC应用程序,我需要GUI与控件对话(调用控件类中的方法),我需要控件与GUI对话(显示与模型更改相关的数据,如输出消息)。因此,我需要GUI拥有一个指向控件的引用(或指针),反之亦然。我想使用依赖项注入来建立这些关系 但是,任何双向DI的问题是,在创建第一个对象之前,不能将第一个对象传递给第二个对象,但是在创建时,也不能将第二个对象传递给第一个对象 如何实现这种双向DI?依赖项注入对于您描述的工作来说是错误的工具 任何拥有控件集合的“GUI对象”(如对话框/窗口)都应该对每个控

我正在创建一个MVC应用程序,我需要GUI与控件对话(调用控件类中的方法),我需要控件与GUI对话(显示与模型更改相关的数据,如输出消息)。因此,我需要GUI拥有一个指向控件的引用(或指针),反之亦然。我想使用依赖项注入来建立这些关系

但是,任何双向DI的问题是,在创建第一个对象之前,不能将第一个对象传递给第二个对象,但是在创建时,也不能将第二个对象传递给第一个对象


如何实现这种双向DI?

依赖项注入对于您描述的工作来说是错误的工具

任何拥有控件集合的“GUI对象”(如对话框/窗口)都应该对每个控件进行引用。在这种情况下,窗口“知道”其控件,但相反的方向不应为真,否则您将失去所述控件的通用性(甚至[在某种程度上]与运行时相关性计算)

相反,控件应该通过公开事件/信号将消息传递给“GUI对象”。如果控件和GUI在不同的线程上运行,那么控件的事件处理程序应该通知GUI调度程序(我不知道有哪个GUI框架没有某种调度程序机制)。如果您告诉我们您正在开发什么GUI框架,我可能会扩展答案以包含一个简短的示例


编辑:既然您是在QT上开发的,我建议您从阅读有关QT的内容开始。不幸的是,我自己对QT的适应程度不够,无法给您提供一个示例,但也许其他用户可以。

我现在明白您对事件的意思了。我是C++新手,所以没有研究过事件。我的GUI是一个基本的QtGUI,有几个按钮和一个用于显示输出消息的主文本区域。我希望控件能够调用printOutput(string)方法,以便向用户显示消息。因此,对于一个事件,我还可以传递某种参数,即显示的文本吗?那么实现这一点最简单的方法是,控件具有一个“GotNewString”信号,主窗口应该通过处理程序函数订阅该信号。控件负责知道何时通知订阅者一个新字符串,即发布事件,主窗口负责知道如何处理事件。这样,控件只执行“control-y”操作,而主窗口只执行“main-window-y”操作查看
view.setController(&controller);controller.setView(&view)