首页 > 解决方案 > 库和可执行 C/C++ 中的循环依赖问题

问题描述

我刚刚开始大规模 C++ 软件开发。我面临一个设计问题,我不知道如何解决。问题围绕以下实体:一个可执行文件 A 和 3 个库 Q、W、E。现在,库 Q 处于最低级别,这意味着 W、E 和 A 调用 Q(独立/独立)。在当前工作流程中,A 调用 W;W 调用 E 和 Q;E 调用 Q。逻辑和物理依赖关系如下所述:

A -> W, Q;
W -> E, Q;
E -> Q

到目前为止,一切都简单而直接,并且是一个方向。我开始研究库“E”中的一个功能,我已经确定了对可执行文件“A”本身的巨大依赖。依赖性是目前由“A”完成的处理形式,而且很多。

E -> A

为了解决这个问题,我指的是 John Lakos 的大型 C++ 软件设计。但是,我无法应用其中提到的与包循环依赖相关的技术(第 7 章),因为我正在使用的是 95% 的 C 代码,没有任何组件和结构(5% C++)。需要重组以打破这种依赖关系的代码量太多了(超过几千行分布在至少 4-5 个源文件中)。

我想到的一个解决方案是在库 E 中创建一个基类,在应用程序 A 中创建一个派生类。使用多态性从 E 调用 A 中的函数。我不确定我是否可以这样做,因为“A”不直接调用'E',而是通过'W'。但是,A 确实与 E 链接,所以它应该是可能的。另一种是使用函数指针调用 A (这似乎不正确)。

问题:有没有一种众所周知的方法来解决这样的问题?在我上面提到的解决方案中,在实施它们中是否有任何隐藏的问题?哪一个更好?任何帮助表示赞赏。提前致谢。

标签: c++polymorphismcomponentssoftware-designcircular-dependency

解决方案


推荐阅读