Основная причина, по которой Boost в основном предназначен только для заголовков, заключается в том, что он сильно ориентирован на шаблоны.Шаблоны обычно получают пропуск из одного правила определения.Фактически, чтобы эффективно использовать шаблоны, вы должны иметь определение, видимое в любой единице перевода, которая использует шаблон.
Другой способ обойти одно правило определения (ODR) - использовать функции inline
.На самом деле, получение свободного прохода от ODR - это то, что на самом деле делает inline
- тот факт, что он может включать функцию, на самом деле является скорее дополнительным побочным эффектом.
Последний вариант (но, вероятно, не такхорошо) это сделать ваши функции статичными.Это может привести к раздуванию кода, если компоновщик не сможет понять, что все эти экземпляры функций действительно одинаковы.Но я упоминаю это для полноты.Обратите внимание, что компиляторы часто включают встроенные функции static
, даже если они не помечены как inline
.