【问题标题】:What are the trade-offs between "separating module interface/implementation unit in a different source file" and using "private module fragment"“在不同的源文件中分离模块接口/实现单元”和使用“私有模块片段”之间的权衡是什么
【发布时间】:2020-11-23 18:04:05
【问题描述】:

从表面上看,使用私有模块片段来分离接口和实现看起来优于在不同的源文件中分离模块接口和实现单元,因为使用私有模块片段时您只需要管理单个源文件。

但是使用私有模块片段是否比在看起来不同的源文件中分离模块接口/实现单元更好?有哪些取舍?

【问题讨论】:

标签: c++ c++20 c++-modules


【解决方案1】:

基于限制的权衡非常明显。私有模块片段 (PMF) 只能出现在主模块接口单元中,并且不能有其他模块单元对具有 PMF 的模块做出贡献。这意味着使用 PMF 的主要缺点是您只能将模块的所有内容放在单个文件中。

从广义上讲,模块导入的性能并不取决于模块中有多少东西。因此,将很多东西放入一个模块中是一个不错的主意。但是将所有这些东西放在一个文件中可能会冗长且难以维护。随着库变得越来越大,将它们分成多个文件通常更有利于组织。

PMF 构造主要是为了便于分发提供模块和非模块构建的库。主要代码位于(大部分)常规头文件和源文件中,用于构建非模块版本。对于模块版本,您只有一个模块单元。在全局片段中,您#include 接口头使用的任何头文件属于您的库(标准库头文件、依赖库等)。在该模块单元的权限范围内,您 #include 一个大的 export{} 块中的所有接口标头。私有模块片段可以#include 用于编译库的所有 .cpp 文件,这样编译器就可以只构建一个模块文件并获取所有内容。

【讨论】:

    猜你喜欢
    • 2022-10-21
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    相关资源
    最近更新 更多