解开.h依赖

如果你有一组.h文件已经成为经典的“gordian结”情况的受害者,你会怎么做?#include one .h意味着你最终包括几乎整个地段?预防显然是最好的药物,但是如果在供应商(!)运送库之前发生了这种情况,您会怎么做?

这是问题的扩展,这可能是更相关的问题 – 你是否应该首先尝试解开依赖关系?

解决方法

我已经在已经拆分成许多库的C代码库上完成了这个(这是一个好的开始).

我不得不锻炼(或猜测)哪个库最依赖,这取决于代码库中的其他内容.然后我依次处理每个库.

我依次查看每个模块(* .cpp文件)并确保它自己的头首先是#included并注释掉其余部分,然后我注释掉了那个头文件中的所有#includes然后重新编译了那个模块让编译器告诉我需要什么.我会取消评论似乎需要的第一个标题,并审核那个标题,并在必要时进行递归.有趣的是看到有多少标头最终不需要.

只需要名称(因为你有一个指针或引用),使用类名;或struct name;,它被称为前向声明并避免#include头文件.

当您注释掉#includes时,编译器非常有助于告诉您依赖性是什么(您需要使用所有编译器重新编译以保持可移植性).

有时我不得不在库之间移动模块,以便没有任何一对或一组库相互依赖.

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...