Специализация функции шаблона c++: "незаконное использование явных аргументов шаблона"
следующий код специализации шаблона:
template<typename T1, typename T2>
void spec1()
{
}
тестовый пример 1:
template< typename T1> //compile error
void spec1<int>()
{
}
тестовый пример 2:
template< typename T2> //compile error
void spec1<int>()
{
}
генерирует следующую ошибку компиляции:
ошибка C2768: 'spec1': незаконное использование явных аргументов шаблона
кто-нибудь знает почему?
1 ответов
шаблоны функций не могут быть частично специализированных, полностью, т. е. так:
template<>
void spec1<char, int>()
{
}
Почему шаблоны функций не могут быть частично специализированы, вы можете захотеть читать это.
когда вы специализируетесь частично (возможно только для классов), вам придется сделать это так:
template <typename T1>
class class1<T1, int>
{
};
так что вы должны перечислить T1
снова.
то, как написаны ваши специализации, они были бы неоднозначными для spec1<int, int>
.