c++ - 库和可执行 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 (这似乎不正确)。
问题:有没有一种众所周知的方法来解决这样的问题?在我上面提到的解决方案中,在实施它们中是否有任何隐藏的问题?哪一个更好?任何帮助表示赞赏。提前致谢。
解决方案
推荐阅读
- laravel - 本地主机中的 PWA 开发
- linux - JMeter SSHMon 侦听器问题错误 - 未捕获 I/O 和交换
- react-native - 如何更改活动顶部选项卡的阴影颜色
- android - Flutter - 将语音效果添加到本地保存的音频文件(.m4a) - 更改音高,添加背景音乐,更改语音
- c - 'newItem' 是一个指针;你的意思是使用'->'吗?
- laravel - 如何从 git diff 命令中排除刀片文件?
- spring - Thymeleaf:选项中的`th:value`在“,”处拆分,导致两个值而不是一个
- ruby-on-rails - rails simple_forms 和 active_storage 图像在编辑产品时导致控制器错误
- azure - Azure Web App Bot - 链接到另一个帐户的知识库
- python - 在c中将枚举作为函数参数传递