C ++ шаблонная специализация функции: & # 8220; недопустимое использование явных аргументов шаблона & # 8221;
-
06-07-2019 - |
Вопрос
Следующий код специализации шаблона:
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': недопустимое использование явных аргументов шаблона
Кто-нибудь знает почему?
Решение
Шаблоны функций не могут быть частично специализированными, только полностью, т.е. вот так:
template<>
void spec1<char, int>()
{
}
Почему шаблоны функций не могут быть частично специализированными, вы можете прочитать это . р>
Когда вы частично специализируетесь (возможно только для классов), вам придется делать это следующим образом:
template <typename T1>
class class1<T1, int>
{
};
поэтому вам нужно снова перечислить T1
.
Как пишутся ваши специализации, они будут неоднозначными для spec1 < int, int >
.
Не связан с StackOverflow