C++ module编程升级指南,子模块与分区全解析

2024年 1月 2日 32.3k 0

子模块

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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论