如何使用文件系统的类路径而不在C ++ 17中包含完整的文件系统标头?

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

我有两个问题:

第一个问题:

我想创建一个类型的对象

std :: filesystem :: path

我希望不做任何改动就这样做,因为标准C 17允许这样做。

boost的优点是我们可以做到:

#include <boost / filesystem / path.hpp>

因此,它可以让您准确包含您想要的内容。

但是如果我在一开始就这样做:

#include <filesystem>

然后,在这种情况下,它在处理后的代码中包含了将不使用的大部分代码(但我不确定此声明)。

所以,我的第一个问题:是否可以仅包含C ++ 17标准的文件系统类“ path”?

我看过:

https://en.cppreference.com/w/cpp/header/filesystem

而且我不需要很多课程。我只需要“路径”。

如何在不涉及提升的情况下仅整合路径?

[我想,如果可能的话,C 17中的if文件系统会减少预处理后获得的代码?

谢谢

c++ performance boost filesystems
1个回答
0
投票
[我还给人的印象是,就编译时间而言,仅必须包含<filesystem>比必须包含“全部” <boost/filesystem/path.hpp>便宜,但是对其进行测量至少在我的机器上可获得令人惊讶的结果,对于<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>的两倍。为了进一步巩固编译时间的增加可以归因于Boost实现而不是其他一些晦涩的原因,我检查了分别包含<boost/filesystem/path.hpp><boost/filesystem/path.hpp>而需要预处理的头文件的数量:] >

<filesystem>

相对:

$ 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

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