C ++ plantilla de especialización de la función: & # 8220; uso ilegal de argumentos de plantilla explícitos & # 8221;

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

Pregunta

El siguiente código de especialización de plantilla:

template<typename T1, typename T2>
void spec1()
{

}

Caso de prueba 1:

template< typename T1> //compile error
void spec1<int>()
{

}

Caso de prueba 2:

template< typename T2> //compile error
void spec1<int>()
{

}

genera el siguiente error de compilación:

  

error C2768: 'spec1': uso ilegal de argumentos de plantilla explícitos

¿Alguien sabe por qué?

¿Fue útil?

Solución

Las plantillas de funciones no pueden estar parcialmente especializadas, solo completamente, es decir:

template<>
void spec1<char, int>()
{

}

Por qué las plantillas de funciones no pueden estar parcialmente especializadas, es posible que desee lea esto .

Cuando te especializas parcialmente (solo es posible para clases), deberías hacerlo así:

template <typename T1>
class class1<T1, int>
{

};

por lo que debe volver a enumerar T1 .

La forma en que se escriben sus especializaciones, serían ambiguas para spec1 < int, int > .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top