C++ Module详解:模块化编程终极指南

2023年 12月 26日 62.0k 0

一、模块接口文件

1.定义和扩展名

模块接口文件定义了模块所提供功能的接口。这些文件通常具有 .cppm 扩展名。模块接口以声明文件定义了某个名称的模块开始,这被称为模块声明。模块的名称可以是任何有效的 C++ 标识符。名称可以包含点,但不能以点开头或结尾,也不能连续包含多个点。有效名称的示例包括 datamodel、mycompany.datamodel、mycompany.datamodel.core、datamodel_core 等。

注意:目前,还没有为模块接口文件标准化的扩展名。然而,大多数编译器支持 .cppm(C++ 模块)扩展名,这也是本书所使用的。请检查你的编译器文档,了解应使用哪种扩展名。

2.导出与模块接口

模块需要明确声明要导出什么,即客户端代码导入模块时应该可见的内容。从模块导出实体(例如,类、函数、常量、其他模块等)是通过 export 关键字完成的。模块中未导出的任何内容只在模块内部可见。所有导出实体的集合称为模块接口。

以下是一个名为 Person.cppm 的模块接口文件示例,定义了一个 person 模块并导出了一个 Person 类。注意它导入了  提供的功能。

export module person; // 模块声明
import ;      // 导入声明

export class Person   // 导出声明
{
public:
    Person(std::string firstName, std::string lastName)
        : m_firstName { std::move(firstName) }, m_lastName { std::move(lastName) } { }

    const std::string& getFirstName() const { return m_firstName; }
    const std::string& getLastName() const { return m_lastName; }

private:
    std::string m_firstName;
    std::string m_lastName;
};

3.使用模块

这个 Person 类可以通过导入 person 模块在以下代码中使用(test.cpp):

import person;       // 导入 person 模块声明
import ;
import ; // 用于 std::string 的 operator

相关文章

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

发布评论