"separating module interface/implementation unit in a different source file" 和使用 "private module fragment" 之间的权衡是什么
What are the trade-offs between "separating module interface/implementation unit in a different source file" and using "private module fragment"
从表面上看,使用私有模块片段来分离接口和实现看起来优于在不同的源文件中分离模块接口和实现单元,因为使用私有模块片段时您只需要管理单个源文件。
但是使用私有模块片段真的比在不同的源文件中分离模块 interface/implementation 单元更好吗?取舍是什么?
基于限制,权衡非常明显。私有模块片段 (PMF) 只能出现在主模块接口单元中,并且不能有其他模块单元贡献给具有 PMF 的模块。这意味着使用 PMF 的主要缺点是您只能将模块的 所有内容 放在单个文件中。
从广义上讲,模块导入的性能并不取决于模块中有多少东西。因此,将很多东西放入模块中是一个不错的主意。但是将所有这些东西放在一个文件中可能 long-winded 并且难以维护。随着图书馆变得越来越大,将它们分成多个文件通常更有利于组织。
PMF 构造主要是为了便于分发提供模块和 non-module 构建的库。主要代码位于(大部分)常规 headers 和源文件中,用于构建 non-module 版本。对于模块版本,您有一个模块单元。在全局片段中,您 #include
接口 headers 使用的任何 headers 不是 库的一部分(标准库 headers、依赖库等)。在该模块单元的范围内,您 #include
一个大 export{}
块中的所有接口 headers。私有模块片段可以 #include
所有用于编译库的 .cpp 文件,这样编译器就可以只构建那个模块文件并获得所有内容。
从表面上看,使用私有模块片段来分离接口和实现看起来优于在不同的源文件中分离模块接口和实现单元,因为使用私有模块片段时您只需要管理单个源文件。
但是使用私有模块片段真的比在不同的源文件中分离模块 interface/implementation 单元更好吗?取舍是什么?
基于限制,权衡非常明显。私有模块片段 (PMF) 只能出现在主模块接口单元中,并且不能有其他模块单元贡献给具有 PMF 的模块。这意味着使用 PMF 的主要缺点是您只能将模块的 所有内容 放在单个文件中。
从广义上讲,模块导入的性能并不取决于模块中有多少东西。因此,将很多东西放入模块中是一个不错的主意。但是将所有这些东西放在一个文件中可能 long-winded 并且难以维护。随着图书馆变得越来越大,将它们分成多个文件通常更有利于组织。
PMF 构造主要是为了便于分发提供模块和 non-module 构建的库。主要代码位于(大部分)常规 headers 和源文件中,用于构建 non-module 版本。对于模块版本,您有一个模块单元。在全局片段中,您 #include
接口 headers 使用的任何 headers 不是 库的一部分(标准库 headers、依赖库等)。在该模块单元的范围内,您 #include
一个大 export{}
块中的所有接口 headers。私有模块片段可以 #include
所有用于编译库的 .cpp 文件,这样编译器就可以只构建那个模块文件并获得所有内容。