子模块
1.C++ 标准与子模块
C++ 标准并没有特别提到子模块,但允许在模块名称中使用点(.),从而可以按任何你想要的层次结构来组织模块。例如,以下是一个 DataModel 命名空间的示例:
export module datamodel;
import ;
export namespace DataModel {
class Person { /* ... */ };
class Address { /* ... */ };
using Persons = std::vector;
}
Person 和 Address 类都在 DataModel 命名空间内,也在 datamodel 模块中。可以通过定义两个子模块来重构:datamodel.person 和 datamodel.address。
2.子模块的模块接口文件
datamodel.person 子模块的模块接口文件如下:
export module datamodel.person; // datamodel.person 子模块
export namespace DataModel {
class Person { /* ... */ };
}
datamodel.address 子模块的模块接口文件如下:
export module datamodel.address; // datamodel.address 子模块
export namespace DataModel {
class Address { /* ... */ };
}
最后,定义一个 datamodel 模块如下。它导入并立即导出两个子模块。
export module datamodel; // datamodel 模块
export import datamodel.person; // 导入并导出 person 子模块
export import datamodel.address; // 导入并导出 address 子模块
import ;
export namespace DataModel {
using Persons = std::vector;
}
当然,子模块中类的方法实现也可以放在模块实现文件中。例如,假设 Address 类有一个默认构造函数,仅打印一条语句到标准输出;该实现可以放在一个名为 datamodel.address.cpp 的文件中:
module datamodel.address; // datamodel.address 子模块
import ;
using namespace std;
DataModel::Address::Address() {
cout