Python 的 "__init__.py" 有 C/C++ 等价物吗?



在Python中,当你创建一个模块时,你会创建一个__init__.py文件(至少,通常)。是否有一个C/c++等价的东西?我的意思是,有没有一种方法可以让#include目录中包含一个文件?

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

你可能想看看像SCons或CMake这样的构建系统,它们允许你在实际的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**

filessystem .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文件,这是一个方便的功能。您只需要包含聚合头,就可以访问所有的功能。

最新更新