известно, что boost использует файлы .hpp для доставки функций шаблона конечным пользователям без необходимости использования связанного файла .cpp
Неправильный глагол: это не «без необходимости », это «без способности ».
Если бы Boost мог, они бы разделили свои библиотеки на заголовки и файлы реализации. На самом деле, они делают это везде, где это возможно.
Причина чистого разделения проста: время компиляции для проектов только с заголовками увеличивается чрезвычайно , потому что связанные файлы заголовков должны читаться, анализироваться и компилироваться каждый раз, когда вы перекомпилируете самую маленькую часть вашего приложения.
Файлы реализации нужно компилировать, только если вам случится перекомпилировать этот конкретный объектный файл.
Большие проекты C и / или C ++ занимают часов для компиляции. И эти используют чистое разделение на заголовочные и объектные файлы. Если бы они использовали только заголовочные файлы, держу пари, что время компиляции будет измеряться в дней вместо часов.
Но для многих библиотек Boost факт заключается в том, что определения шаблонов не могут находиться в отдельном модуле компиляции, чем их объявления, поэтому это просто невозможно.