Python 和 C++20 模块的表达差异和相似之处? `导入` vs `导出`/`导入`

问题描述 投票:0回答:1

我熟悉Python的

import
机制(虽然不是专家)。我对C++最终在C++20中得到的modules机制一点也不熟悉。尽管它们是两种截然不同的语言,但我确信我习惯使用 Python 的许多惯用语
import
可以通过 C++ 的模块机制来近似。您能帮我找到(近似)等效项或解释为什么在 Python 中完成导入的不同方式之间没有密切相似之处吗?

  1. 根据我的阅读,Python 的

    from foobar import *
    应该大致相当于 C++ 的
    import foobar;
    。也就是说,来自
    foobar
    的所有公共符号都可以在顶级命名空间中使用。但它们之间有什么主要区别吗?

  2. Python 的

    import foobar
    使符号可用,但它们都放在命名空间
    foobar
    中。在 C++ 中可以实现同样的事情,即导入的结果包含在命名空间中吗?

  3. Python 的

    from foobar import barbaz
    仅使单个符号
    barbaz
    可见。能否指示 C++ 的
    import
    对有限数量的外部符号进行操作,而不是导入模块的全部内容?

  4. 最后,

    from foobar import barbaz as qux
    导入一个符号并使其可以以不同的名称使用。 C++ 导入也能达到同样的效果吗?

python c++ import c++20
1个回答
0
投票

C++ 模块与 Python 模块没有太多共同点。

特别是,C++ 中的模块与命名空间完全正交。它们替换/扩展了头文件机制,而不是命名空间机制。

import XY;
并不暗示模块中的实体是否可以使用非限定名称命名,也不允许使用
XY
来寻址具有限定名称的实体。

模块中的名称可以是任何命名空间的一部分,就像旧的 C++ 中一样。

import
指令不能用于有选择地导入实体或为它们指定新名称。

© www.soinside.com 2019 - 2024. All rights reserved.