Почему пакет повышения С++ содержит только файлы hpp

Я новичок в С++. Я просто загрузил библиотеки ускорения для изучения. Я хотел изучить некоторые детали реализации, поэтому я искал файлы cpp. К моему удивлению, я пока не нашел.

Там, кажется, есть только файлы hpp. Где файлы cpp? Этот вопрос может показаться вам наивным, но, пожалуйста, медведь со мной на мгновение.

Ответ 1

Файлы .hpp - это заголовки, которые вы должны включить в свой код, чтобы использовать классы повышения. Многие библиотеки ускорения имеют только заголовки; все реализации находятся в файлах hpp. Для тех, у кого есть источник, вы видите только скомпилированные версии как .lib файлы.

Если вы загружаете исходный дистрибутив boost, у него должно быть несколько подкаталогов:

  • boost: содержит заголовки .hpp.
  • lib: содержит .lib файлы (скомпилированные сведения о реализации)
  • libs: источник данных о реализации

Ответ 2

Из Документация Boost:

Большинство библиотек Boost только для заголовков: они состоят полностью из заголовка файлы, содержащие шаблоны и встроенные функции, и не требуют отдельно скомпилированные библиотечные двоичные файлы или специальное обращение, когда сшивание.

См. эту ссылку для списка библиотек, которые не являются только заголовками, и должны быть созданы отдельно. Для этих библиотек файлы .cpp находятся в каталоге /libs Распространение Boost. Если вы получили предварительно скомпилированный пакет, вместо этого вы найдете уже скомпилированные .lib файлы в каталоге/lib.

Ответ 3

Поскольку многие (но не все) библиотеки реализованы с использованием шаблонов и поэтому должны быть помещены в файлы заголовков.

Ответ 4

Для тех, которые не являются заголовками, исходные файлы можно найти внутри подкаталога libs.

Ответ 5

Большая часть библиотеки boost - это просто шаблон. В предыдущем стандарте С++ уже было ключевое слово export, чтобы позволить разработчику отделить реализацию от интерфейса. Печальная правда заключалась в том, что ключевое слово никогда не работало полностью (трудно реализовать с точки зрения поставщика компилятора и сложно использовать его прямо для разработчика). Один из способов устранить проблему - обеспечить интерфейс и реализацию в заголовке и избежать файла реализации. Кстати, есть несколько ускорительных библиотек, которые вам нужно скомпилировать и связать, чтобы использовать их, я уверен, вы найдете файлы реализации в этих библиотеках.

Ответ 6

Я считаю, что большинство библиотек Boost реализованы только в реальных файлах заголовков, как упоминалось в предыдущих плакатах. Как уже упоминалось, скомпилированный код реализации будет включен как отдельный файл библиотеки, если он отделен от файлов заголовков.

Вы упомянули о том, что новичок в С++, поэтому я считаю, что стоит упомянуть, что этот тип дистрибутива библиотеки не является особым для Boost. Другие сторонние библиотеки и API, которые вы используете, скорее всего, будут структурированы таким же образом; вы найдете пакеты файлов заголовков и файлов библиотеки, без файлов .c,.cxx,.cpp и т.д. Это делается по ряду причин, в том числе для скрытия реализации функциональных возможностей библиотеки и для того, чтобы разрешить загрузку разделяемых библиотек в память один раз.

Эта статья может помочь вам прояснить ситуацию:
http://www.learncpp.com/cpp-tutorial/a1-static-and-dynamic-libraries/

Ответ 7

Вероятно, вы смотрите на предварительно скомпилированный пакет, где файлы cpp доступны в виде библиотек, а не из источника. Если вы действительно захватите вы найдете некоторые файлы cpp.