【发布时间】:2021-11-02 19:58:32
【问题描述】:
在 C++20 中,对于每个模块 M,必须只有一个源文件开始:
export module M;
(这称为主模块接口单元。)
可选地,每个模块M 可能有额外的源文件:
(1) 零个或多个源文件开始:
module M;
(这些被称为模块实现单元。)
(2) 零个或多个源文件开始(对于一些独特的P):
module M : P;
(这些都是模块实现单元和模块分区)
(3) 零个或多个源文件开始(对于一些独特的P):
export module M : P;
(这些都是模块接口单元和模块分区)
因此,在组织代码库以使用模块时,需要做出以下决定:
A.代码库分为多少个模块?
B.对于每个模块,该模块分为多少个源文件?
C.如果 B 的答案不止一个,那么这三种(1,2 或 3)中的哪一种是多余的文件?
在 A 中使用少量模块(粗粒度)和大量模块(细粒度)之间的权衡是什么?对性能有任何技术影响吗?功能差异呢? (有人建议“模块在大块中效果最好”?为什么?)
你什么时候只回答 B 的一个?当对 B 回答多个问题时,C 是如何做出决定的?即 1、2 和 3 之间的功能差异是什么?你什么时候会用一个来代替另一个?
【问题讨论】:
-
有很多问题,很难回答。但我想知道。当 IDE 对它们的支持足够时,我希望在我们公司的代码库中使用模块(目前:在 Visual Studio 上通常可以,但在 Xcode 上不行)。我希望在使用模块之前先对它们进行一些实验。
-
@prapin Visual Studio 有一个用于管理模块相互依赖的内部工具,但 Xcode 可能还没有。我正在开发这样一个用于 premake 的工具(它具有对 Visual Studio 的早期模块支持)来支持带有 Makefile 的 GCC。如果你好奇this 是存储库。任何反馈表示赞赏。
标签: c++ module c++20 c++-modules