Как опубликовать заголовочные файлы с реализациями шаблонов?

Мы создаем набор библиотек с открытым API, который будет использоваться различными третьими лицами. Некоторые из библиотек являются чистыми C, поэтому очевидно, что они имеют заголовок в стиле C с функциями и определениями структуры и соответствующей библиотекой. Они в порядке.

Некоторые библиотеки написаны с использованием умеренно сложного C ++ (нацеленного на старые компиляторы), поэтому мы реализовали некоторую форму знаменитой идиомы pimpl. Это тоже нормально.

С другой стороны, значительная часть заголовочных файлов — это C ++, использующий сильно шаблонный код. знание Почему шаблоны могут быть реализованы только в заголовочном файле? но также не желая раскрывать слишком много деталей реализации глазам, которые не должны их видеть, мы подвергли их резкому рефакторингу, чтобы исключить как можно больше внутренних деталей и иметь только действительно необходимые биты … Код оставлен.

Так что меня это озадачивает: есть ли предпочтительный способ распространения заголовочных файлов, которые в основном содержат шаблоны? Какие хорошие практики, лучшие подходы и советы и хитрости есть?

5

Решение

Для вдохновения посмотрите на заголовочные файлы вашего компилятора C ++. Стандартная библиотека C ++ полна шаблонов, и вы обычно найдете весь код шаблона в заголовках.

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

Используя в качестве примера более простой сценарий до C ++ 11, библиотека C ++ обычно обеспечивает std::basic_string реализация только для std::basic_string<char> а также std::basic_string<wchar_t>; и оставить кучу шаблонов кода внутри самой библиотеки, просто std::basic_string Объявление шаблона видно в заголовочных файлах.

4

Другие решения


По вопросам рекламы [email protected]