如何在 C++17 中不包含完整文件系统头的情况下使用文件系统的 class 路径?
How to use the class path of filesystem without including the complete filesystem header in C++17?
我有两个问题:
第一个问题:
我想创建一个
类型的对象
std :: filesystem :: path
我希望不通过 boost 来完成它,因为标准 C 17 允许这样做。
boost 的优势在于我们可以做到:
#include <boost / filesystem / path.hpp>
所以它允许您准确地包含您想要的内容。
但如果我一开始就这样做:
#include <filesystem>
那么在这种情况下,它在处理后的代码中包含了很大一部分不会使用的代码(但我不确定这种说法)。
所以,我的第一个问题:是否可以仅包含 C++17 标准的文件系统的 class "path"?
我看了:
https://en.cppreference.com/w/cpp/header/filesystem
还有很多 class 我不需要。我只需要 "path".
如何在不涉及boost的情况下只集成路径?
我想,万一有可能,在 C 17 中使用 if 文件系统会减少预处理后获得的代码?
谢谢
标准要求 path
至少在 <filesystem>
中向前声明,参见:29.11.5 Header <filesystem>
synopsis。实际上,这将取决于您的编译器在哪里声明了 std::filesystem::path
,因此,您应该只包含 <filesystem>
.
我也觉得只需要包含 <boost/filesystem/path.hpp>
就编译时间而言比必须包含 'all of' <fileysystem>
更便宜,但测量它给出了令人惊讶的结果,至少在我的机器上,对于 std::filesystem
:
$ echo '#include <filesystem>' | time -p g++ -std=c++17 -x c++ -c -
real 0.49
user 0.43
sys 0.05
与仅包括 <boost/filesystem/path.hpp>
:
$ echo '#include <boost/filesystem/path.hpp>' | time -p g++ -std=c++17 -x c++ -c -
real 0.89
user 0.81
sys 0.07
所以包含 <filesystem>
的速度几乎是包含 'only' <boost/filesystem/path.hpp>
的两倍。为了进一步证实编译时间的增加可以归因于 Boost 实现而不是其他一些晦涩的原因,我检查了由于包含 <boost/filesystem/path.hpp>
和 [=15= 而需要预处理的头文件的数量] 分别是:
$ echo '#include <boost/filesystem/path.hpp>' | g++ -std=c++17 -x c++ -M -c - | wc -l
407
对比:
$ echo '#include <filesystem>' | g++ -std=c++17 -x c++ -M -c - | wc -l
144
我认为可以安全地得出结论,如果您担心的是编译时间,则不必担心包含 <filesystem>
。
我有两个问题:
第一个问题:
我想创建一个
类型的对象std :: filesystem :: path
我希望不通过 boost 来完成它,因为标准 C 17 允许这样做。
boost 的优势在于我们可以做到:
#include <boost / filesystem / path.hpp>
所以它允许您准确地包含您想要的内容。
但如果我一开始就这样做:
#include <filesystem>
那么在这种情况下,它在处理后的代码中包含了很大一部分不会使用的代码(但我不确定这种说法)。
所以,我的第一个问题:是否可以仅包含 C++17 标准的文件系统的 class "path"?
我看了:
https://en.cppreference.com/w/cpp/header/filesystem
还有很多 class 我不需要。我只需要 "path".
如何在不涉及boost的情况下只集成路径?
我想,万一有可能,在 C 17 中使用 if 文件系统会减少预处理后获得的代码?
谢谢
标准要求 path
至少在 <filesystem>
中向前声明,参见:29.11.5 Header <filesystem>
synopsis。实际上,这将取决于您的编译器在哪里声明了 std::filesystem::path
,因此,您应该只包含 <filesystem>
.
我也觉得只需要包含 <boost/filesystem/path.hpp>
就编译时间而言比必须包含 'all of' <fileysystem>
更便宜,但测量它给出了令人惊讶的结果,至少在我的机器上,对于 std::filesystem
:
$ echo '#include <filesystem>' | time -p g++ -std=c++17 -x c++ -c -
real 0.49
user 0.43
sys 0.05
与仅包括 <boost/filesystem/path.hpp>
:
$ echo '#include <boost/filesystem/path.hpp>' | time -p g++ -std=c++17 -x c++ -c -
real 0.89
user 0.81
sys 0.07
所以包含 <filesystem>
的速度几乎是包含 'only' <boost/filesystem/path.hpp>
的两倍。为了进一步证实编译时间的增加可以归因于 Boost 实现而不是其他一些晦涩的原因,我检查了由于包含 <boost/filesystem/path.hpp>
和 [=15= 而需要预处理的头文件的数量] 分别是:
$ echo '#include <boost/filesystem/path.hpp>' | g++ -std=c++17 -x c++ -M -c - | wc -l
407
对比:
$ echo '#include <filesystem>' | g++ -std=c++17 -x c++ -M -c - | wc -l
144
我认为可以安全地得出结论,如果您担心的是编译时间,则不必担心包含 <filesystem>
。