C++20 #import ""-statement: 是否可以使用多个预处理的 header 文件

C++20 #import ""-statement: Will it be possible to use multiple preprocessed header files

在 C++20 中,可以用

代替包含 header
#include "header.h"

使用

#import "header.h" // Edit: this is not standard see comments

(这是针对无法完全转换为模块并使用不带#的普通导入关键字的旧代码)

我的问题是关于预处理的。长期以来,每个翻译单元只能预编译和使用一个 header。 (Clang 似乎有一些特殊的级联包含文件,我在这里不考虑)

是否可以使用 #import 关键字为每个翻译单元预编译和使用多个 header 文件,既然 header 文件可以稍微隔离一下?

编辑:

所以我对此的误解似乎是这样的事实,即在例如 g++ 中启用模块时,使用 #include "..." 会自动变成 import ""(我认为)。

我找到了这个视频 Nathan Sidwell “Converting to C++20 Modules”,其中 Nathan 解释了如何预编译“header 单元”,我猜这是 g++ 中的模块分支,但它似乎在 clang++ 中不起作用- 10.我不知道这是否也适用于其他编译器。

是的,可以将 import 任意数量 的 header 个单元转换为一个翻译单元。因为模块的规则阻止了它们之间的任何 交互 (特别是,它们不能共享宏),所以它们都可以独立“预编译”。也就是说,一些实现可能 copy 生成的编译模块接口文件中的某些组件到正在编译的翻译单元中,以更好地模拟文本包含的行为(尤其是与 header 喜欢那些有内部链接的)。

单独地,#include 应用于 header 文件,实现知道(可能从某些选项或配置文件)可用作 header 单元可能是 重新解释 import 以提供此行为,即使对于未修改的文件(特别是,对于来自您无法控制的另一个库的 header 文件)。