C ++ шаблонная специализация функции: & # 8220; недопустимое использование явных аргументов шаблона & # 8221;

StackOverflow https://stackoverflow.com/questions/1416345

Вопрос

Следующий код специализации шаблона:

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 > .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top