微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 的“__init__.py”是否有 C/C++ 等价物?

如何解决Python 的“__init__.py”是否有 C/C++ 等价物?

在 Python 中,当您创建一个模块时,您会创建一个 __init__.py 文件(至少通常如此)。是否有 C/C++ 等价物?我的意思是有没有办法#include一个目录实际上包含一个文件

解决方法

不,C++ 本身没有这样的特性。通常使用的编译器似乎也不支持它。 C++20 中引入了一个类似于 Python 模块的功能:https://en.cppreference.com/w/cpp/language/modules

您可能想查看像 SConsCMake 这样的构建系统,它们允许您在实际的 C++ 预处理/编译之前实现一些预处理。例如,您可以使用它们生成一个包含目录中所有标题的头文件,或者如果您确实需要它,可以做任何更复杂的事情。

请注意最后一句话的最后一部分:您真的需要它吗?如果所有依赖项都是显式的,那么代码通常更容易维护。包含“所有内容”的标题将使其难以跟踪。当然,人们可以想象打破这一规则的一些正当理由,例如如果也生成了这些标题,并且希望有一种包含所有这些标题的自动方式。不过,最好是这种“魔法”的范围是独立的并且尽可能小。

,

是否有 C/C++ 等价物?

不等价,但对于只有头文件的库,通常的做法是包含一个聚合头文件,这是一个头文件而不是包含其他头文件。例如,如果我们查看 boost filesystem:

/mnt/e/Repository/filesystem/include/boost/
├── filesystem
│   ├── config.hpp
│   ├── convenience.hpp
│   ├── detail/
│   ├── directory.hpp
│   ├── exception.hpp
│   ├── file_status.hpp
│   ├── fstream.hpp
│   ├── operations.hpp
│   ├── path.hpp
│   ├── path_traits.hpp
│   └── string_file.hpp
└── filesystem.hpp **Aggregate header**

filesystem.hpp 的内容:

...
#  include <boost/filesystem/config.hpp>
#  include <boost/filesystem/path.hpp>
#  include <boost/filesystem/exception.hpp>
#  include <boost/filesystem/directory.hpp>
#  include <boost/filesystem/operations.hpp>
#  include <boost/filesystem/file_status.hpp>
#  include <boost/filesystem/convenience.hpp>
#  include <boost/filesystem/string_file.hpp>

...

请注意,这与 __init__.py 文件的行为不同,它是一个方便的功能。您只需包含聚合标头即可访问所有功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。