La siguiente plantilla de especialización código:

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’ : el uso ilegal de explícito argumentos de plantilla

¿Alguien sabe por qué?

  • lo de la plataforma/compilador estás usando?
  • Estoy utilizando Visual C++ 08
InformationsquelleAutor jameszhao00 | 2009-09-12

1 Comentario

  1. 52

    Función de las plantillas no pueden ser parcialmente especializados, sólo plenamente, es decir, como que:

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

    Por qué la función de las plantillas no pueden ser parcialmente especializados, puede que desee leer esto.

    Cuando usted se especializan parcialmente (sólo es posible para las clases), tendrías que hacer como que:

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

    por lo que tienen a la lista T1 de nuevo.

    La forma en que sus especialidades son por escrito, que sería ambigua para spec1<int, int>.

    • Ah, así que puedo tener parcialmente clases especializadas integrado con funciones estáticas?
    • Oh, veo que el artículo que el enlace se explica que importa ya. He quitado mi respuesta, ya que he encontrado que el reenvío a una clase es más conveniente para este caso. En los casos donde T1 y T2 se utilizan como los tipos de los parámetros de la función, aunque, me parece sobrecargar mucho más legible, ya que es igual que la normal función de la sobrecarga de entonces.
    • Cuando leí «sólo es posible para las clases», me resistió. He encontrado que es posible que tanto las clases y estructuras ;-).
    • Como las clases y las estructuras son casi la misma cosa, yo estoy bien con «sólo para las clases».

Dejar respuesta

Please enter your comment!
Please enter your name here