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