шаблон не является классом. Это шаблон. (Проект построения класса). Он может стать только классом, когда учитываются все параметры шаблона.
написав этот (опечатка исправлена):
template <typename T, int N>
class MyClass {
};
Вы можете всеми средствами сделать это:
template<int N> class MyClass<int, N>;
template<int N> class MyClass<float, N>;
Но это не инстанцировании шаблон (потому что не имеет никакого значения), ни это создание экземпляра конкретного класса, сформированного из этого шаблона. То, что он на самом деле делает, - это форвардное объявление существования частично специализированного (возможно, бесконечного) подмножества шаблона.
Вы также можете сделать это:
template<int N> class MyClass<int, N> {};
template<int N> class MyClass<float, N> {};
который имеет частично специализированные MyClass
для <int, [all values of N]>
и <float, [all values of N]>
.
Однако этот подмножество шаблонов все еще не создан. Всего определено.
Чтобы создать экземпляр шаблона, будь то частично специализированный или нет, мы должны назвать его, учитывая все аргументы шаблона.