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。
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
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!