Фактически, это явное создание шаблона. Используйте это, чтобы заставить компилятор генерировать все (не вложенные в шаблон) члены класса шаблона. Иногда это удобно при внешнем связывании с шаблонным кодом, чтобы предотвратить дублирование объектного кода или отсутствие внешних элементов (когда методы встроены).
Специализации шаблона кажутся похожими, но требуют template<>
, чтобы объявить о специализации уже объявленного шаблона. Кроме того, они будут определять альтернативное определение класса для этого конкретного параметра шаблона (как упоминает @rerun).
Теперь, на пересечении тех, вы могли видеть
template<> class polynomialT<GFNUM2m>;
Который IS , фактически, заявленный форвард шаблон специализация . Это послужило бы для предотвращения того, что компилятор автоматически создает экземпляр шаблона класса для этого параметра типа в течение остальной части модуля перевода.