Для библиотеки stati c с шаблонами классов, как я могу скрыть детали реализации и дополнительные заголовки из кода пользователя? - PullRequest
0 голосов
/ 16 июня 2020

Просматривая список предложенных «похожих вопросов», мне показалось, что они предпочли бы материал, содержащий только заголовок, и один вопрос, который хочет разделить, но имеет другие проблемы. служебных классов, многие из них - шаблоны. Они были созданы как часть предыдущего проекта, но четко отделены друг от друга, оставаясь на затылке: «может понадобиться повторно использовать позже».

Итак, теперь я собираюсь сделать эту библиотеку stati c для использования в других проектах. Связал его с другим проектом, включил заголовки, попытался использовать шаблон класса и бум: компоновщик жалуется. Правильно. О чем я только думал. У этих шаблонов классов есть отдельные файлы. cpp для основной части реализации, которые вряд ли можно запечь в двоичном файле библиотеки, если на данном этапе не известны аргументы шаблона, а используемый проект знает только заголовки с объявлениями. Однако у расставания были веские причины. Реализация включает в себя множество других заголовков глубже в систему, которыми я не хочу беспокоить пользователя библиотеки.

Поэтому мне интересно: в текущих версиях C ++ вы действительно можете в некоторых "элегантным" способом, каким-то образом создать библиотеку stati c, которая использует шаблоны классов, не беспокоя пользователя о добавлении множества дополнительных вещей, включая заголовки библиотеки? Конечно, факт неизвестных аргументов шаблона не меняется. Но, возможно, это было решено способами, о которых я не знаю.

Я бы хотел избежать способа «просто поместите все в заголовок и готово», если это возможно. (конкретная параметризация шаблона для нескольких заранее известных параметров, как это было предложено в одном сообщении SO, также не работает, это должно быть общим c)

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

...