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?

Foi útil?

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
scroll top