有哪些技术可以限制C++项目中的编译依赖关系
What are some techniques for limiting compilation dependencies in C++ projects?
在C++项目中,编译依赖关系会使软件项目难以维护。在模块内和模块间限制依赖关系的最佳实践是什么?
- 远期声明
- 抽象接口
- 皮姆普习语
Herb Sutter在其优秀的书籍Exceptional C++中,在第26、27和28项"最小化编译时间依赖性,第1、2和3部分"中对这个主题进行了很好的处理,ISBN:0201615622。
alt文本http://ak.buy.com/db_assets/prod_images/489/30611489.jpg
IMHO,这是最好的C++编程书籍之一。
我认为您需要对此非常小心和周到。通常,您可以通过分离代码和使用抽象接口(例如:函数指针或等效对象)来限制依赖关系,但分离通常会增加脆弱性。例如,可以通过通用抽象接口调用模块,以减少对实际对象实现的依赖,但必须与对象本身同步更新接口,否则代码将在运行时失败。
我想说,在具有明确层次结构的模块中构建大型项目很重要,但在每个模块中,不要过分分解代码来限制依赖关系。如果要改进维护,就必须在减少依赖性和减少代码脆弱性之间取得平衡。
还可以看看:
大规模C++软件设计(Addison-Wesley专业计算系列)
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 示例C++项目编译中的警告
- 使用 raylib 静态库进行项目编译
- 如何使用我构建的库,而不会从源代码出错,但不为我自己的项目编译?
- C++项目编译强制使用 /clr 选项,尽管在没有公共语言运行时支持的情况下执行它
- 我可以在将项目编译为静态库(未定义的引用)时在代码中使用 QImage 吗?
- 旧项目编译的未定义引用
- Codelite不使用全局编译设置或项目编译设置
- x264项目编译
- 使用 Boost 单元测试进行 G++ 项目编译
- 项目编译时无法使用 gvim
- 强制将特定文件编译为Objective-C/文件类型,但将整个项目编译为Objective C++
- Eclipse显示错误,但项目编译并执行
- 如何最好地将C++/Cython项目编译成可执行文件
- CMake项目编译精细的SHARED库,但不使用STATIC库
- 如何在实践中解决项目编译中链接库的顺序问题
- Cef项目编译链接error2001
- 我的项目编译在vs2008没有一个单一的问题,但不是在2010年
- visual studio 2010 - c++项目编译和链接