
回复
场景
注:以 C++11 版本来展开阐述。
C++11 没有官方的包管理、模块功能,代码组织这块还处于手动管理阶段。代码组织会影响下面几个方面,或者说以下几个方面和代码组织有关:
解决方案
目录和文件
考虑到多平台的兼容性,目录和文件均使用小写字母+下划线来命名,即蛇形命名风格。
目录层次和「命名空间 / namespace」相对应,主要靠目录来组织模块,文件辅助之:
├── modA
│ ├── fun1.cpp
│ ├── fun1.h
│ └── fun2.cpp
├── modA.h
├── modB
│ ├── fun1.cpp
│ ├── fun1.h
│ ├── fun2.cpp
│ └── fun2.h
└── modB.h
命名空间
命名空间最好能直观地反映架构的设计,这样在看了架构设计的文档之后,看代码时能方便地对应起来。
所以命名空间的划分就是架构设计的划分,一般包含下面几个维度:
namespace app {}
namespace rt {
namespace log {}
namespace config {}
namespace io {}
}
namespace ui {
namespace login {}
namespace home {}
}
namespace model {
namespace user {}
namespace monitor {}
}
编译优化
这里的优化指的是减少编译时间,最主要的就是轻量化各模块的公开头文件,可以简单理解为手动维护的「模块导入」。
反例的典型代表就是在一个头文件里包含所有其他的头文件,美名其曰「一个头文件搞定」。
当然,一个头文件也是可以搞定的,不过这是终极优化后的结果,需要采取如下几个步骤后达到: