Как использовать путь к классу файловой системы, не включая полный заголовок файловой системы в C ++ 17? - PullRequest
1 голос
/ 17 октября 2019

У меня есть два вопроса:

Первый вопрос:

Я хочу создать объект типа

std :: filesystem :: path

Я хочу сделать это без прохождения буста,потому что стандарт C 17 допускает это.

преимущество с надстройкой в ​​том, что мы можем сделать:

#include <boost / filesystem / path.hpp>

Таким образом, он позволяет вам включать именно то, что вы хотите.

Но если в начале я сделаю:

#include <filesystem>

, то в этом случае он включает большую часть кода, который не будет использоваться (но я не уверен в этом утверждении) в коде после обработки.

Итак, мой первый вопрос: возможно ли включить только класс «путь» файловой системы со стандартом C ++ 17?

Я смотрел:

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

И есть множество классов, которые мне не нужны. Мне нужен только «путь».

Как я могу интегрировать только путь, не включая boost?

Я думаю, в случае, если это возможно, использование файловой системы if в C 17 уменьшает код, полученныйпосле предварительной обработки?

Спасибо

1 Ответ

1 голос
/ 18 октября 2019

Стандарт требует, чтобы path был как минимум заранее объявлен в <filesystem>, см .: 29.11.5 Заголовок <filesystem> Сводка . На практике это будет зависеть от вашего компилятора, в котором объявлено 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> и <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

Думаю, можно с уверенностью заключить, что вам не нужно беспокоиться о включении <filesystem>, если вас беспокоит время компиляции.

...