Especialización de la plantilla en C++ de la función: "uso ilegal de argumentos de plantilla explícitos"
templates template-specialization (1)
Las plantillas de funciones no se pueden especializar parcialmente, solo en su totalidad, es decir, así:
template<>
void spec1<char, int>()
{
}
Por qué las plantillas de funciones no pueden ser parcialmente especializadas, puede leer esto .
Cuando te especializas parcialmente (solo es posible para las clases), deberías hacerlo así:
template <typename T1>
class class1<T1, int>
{
};
así que tienes que listar T1
nuevo.
La forma en que se escriben sus especializaciones, serían ambiguas para spec1<int, int>
.
El siguiente código de especialización de plantillas:
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é?