Компиляция заголовка шаблона в C ++ - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть файлы main.cpp и node.h (template).Кажется, это работает, когда я компилирую только main.cpp, который включает в себя node.h.Мне интересно, если это нормально, чтобы не скомпилировать node.h?

1 Ответ

0 голосов
/ 28 сентября 2018

Компиляторы C ++ обычно требуют, чтобы определения всех шаблонов были видны в каждой единице перевода, в которой они используются (единственное реальное исключение - если вы разрешаете использовать только определенные специализации, и эти специализации создаются где-то в этом конкретном случаеВы можете скрыть реализацию).

Независимо от того, разделяете ли вы объявления шаблонов из их определений, которые вы описываете, на самом деле просто вопрос стиля.Лично меня это не волнует, так как это затрудняет поиск фактического кода для любого данного шаблона.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...