C ++ plantilla de especialización de la función: & # 8220; uso ilegal de argumentos de plantilla explícitos & # 8221;
-
06-07-2019 - |
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é?
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