Когда мне следует подумать о создании библиотеки только заголовок?

Очевидно, библиотеки шаблонов должны быть только заголовочными, но для не-шаблонов, когда вы должны делать вещи только заголовками?

25
задан TemplateRex 17 August 2012 в 08:35
поделиться

2 ответа

Если вы думаете, что ваша не шаблонная библиотека может быть только заголовочной, рассмотрите возможность деления ее на два файла в любом случае, а затем предоставьте третий файл, который включает в себя .h и .cpp (с защитой включения). 114]

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

Как только вы узнаете, что у пользователей есть возможность использовать библиотеку, ответом, вероятно, станет «предложите эту опцию, когда это возможно». Настолько, что включение его из нескольких TU не нарушало бы ODR. Например, если ваши не static свободные функции относятся к static глобальным переменным, то вам не повезло, так как различные определения этой функции в разных TU будут ссылаться на разные объекты с одинаковым именем, которое является УСО-нарушение.

14
ответ дан 28 November 2019 в 21:57
поделиться

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

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

0
ответ дан 28 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: