C ++ especialização de modelo de função: “uso ilegal de argumentos de modelo explícitas”
-
06-07-2019 - |
Pergunta
O seguinte código do modelo de especialização:
template<typename T1, typename T2>
void spec1()
{
}
Caso de teste 1:
template< typename T1> //compile error
void spec1<int>()
{
}
Caso de teste 2:
template< typename T2> //compile error
void spec1<int>()
{
}
gera o seguinte erro de compilação:
Erro C2768: 'spec1': uso ilegal de argumentos de modelo explícitas
Alguém sabe por que?
Solução
modelos de função não pode ser parcialmente especializado, único totalmente, ou seja, como esse:
template<>
void spec1<char, int>()
{
}
Pois, por modelos de função não pode ser parcialmente especializada, você pode querer ler este .
Quando você se especializar parcialmente (só é possível para classes), você teria que fazê-lo assim:
template <typename T1>
class class1<T1, int>
{
};
então você tem que lista T1
novamente.
A forma como suas especializações são escritos, eles seria ambíguo para spec1<int, int>
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow