В C ++ я работаю с библиотекой boost, и у меня есть каталог boost \ со всеми файлами и каталогами boost .hpp, например, в папке include моего компилятора в MinGW \ include \ boost \. Что меня смущает, так это то, что когда я хочу использовать файл «lambda.hpp», мне нужно ввести:
#include <boost/lambda/lambda.hpp>
но если я включаю весь каталог, такой как «boost \gorithm», мне нужно только набрать:
#include <algorithm>
хотя папка «алгоритм» не находится в каталоге «MinGW \ include», она находится в «MinGW \ include \ boost \».
Почему мне не нужно указывать полный путь при включении целых каталогов, а не отдельных заголовочных файлов?
Заголовочный файл <algorithm>
является частью стандартной библиотеки, а не Boost.
Пути относятся к списку путей, которые препроцессор ищет для заголовочных файлов. Так что в случае <algorithm>
есть файл algorithm
в корне одного из этих путей, а в случае <boost/lambda/lambda.hpp>
есть другой путь поиска с подпапкой boost
которая имеет подпапку lambda
у которого есть файл lambda.hpp
,
Кстати, все заголовочные файлы Boost имеют суффикс (то есть расширение) .hpp
в то время как стандартный файл заголовка библиотеки не имеет ни одного вообще.
Что касается мышления, вы включаете полный каталог algorithm
препроцессор не поддерживает это, вместо этого вы должны включить файлы в путь boost/algorithm
по отдельности.
Других решений пока нет …