我熟悉Python的
import
机制(虽然不是专家)。我对C++最终在C++20中得到的modules机制一点也不熟悉。尽管它们是两种截然不同的语言,但我确信我习惯使用 Python 的许多惯用语 import
可以通过 C++ 的模块机制来近似。您能帮我找到(近似)等效项或解释为什么在 Python 中完成导入的不同方式之间没有密切相似之处吗?
根据我的阅读,Python 的
from foobar import *
应该大致相当于 C++ 的 import foobar;
。也就是说,来自 foobar
的所有公共符号都可以在顶级命名空间中使用。但它们之间有什么主要区别吗?
Python 的
import foobar
使符号可用,但它们都放在命名空间 foobar
中。在 C++ 中可以实现同样的事情,即导入的结果包含在命名空间中吗?
Python 的
from foobar import barbaz
仅使单个符号 barbaz
可见。能否指示 C++ 的 import
对有限数量的外部符号进行操作,而不是导入模块的全部内容?
最后,
from foobar import barbaz as qux
导入一个符号并使其可以以不同的名称使用。 C++ 导入也能达到同样的效果吗?
C++ 模块与 Python 模块没有太多共同点。
特别是,C++ 中的模块与命名空间完全正交。它们替换/扩展了头文件机制,而不是命名空间机制。
import XY;
并不暗示模块中的实体是否可以使用非限定名称命名,也不允许使用 XY
来寻址具有限定名称的实体。
模块中的名称可以是任何命名空间的一部分,就像旧的 C++ 中一样。
import
指令不能用于有选择地导入实体或为它们指定新名称。