¿Qué significa plantilla (sin ninguna clase T en el)?

Estoy leyendo un código fuente en stl_construct.h, en la mayoría de los casos tiene algo en <> y veo algunas líneas con solo "template<> ...". ¿Qué es esto?

preguntado el 21 de mayo de 12 a las 10:05

3 Respuestas

Esto significaría que lo que sigue es un especialización de plantilla.

contestado el 21 de mayo de 12 a las 10:05

Supongo que leí completamente mal la Q y respondí algo que no me preguntaban.
Así que aquí respondo la Q que se pregunta:

Es un Especialización explícita con una lista de argumentos de plantilla vacía.

Cuando crea una instancia de una plantilla con un conjunto dado de argumentos de plantilla, el compilador genera una nueva definición basada en esos argumentos de plantilla. Pero hay una facilidad para anular este comportamiento de generación de definiciones. En lugar de que el compilador genere la definición, podemos especificar la definición que el compilador debe usar para un conjunto dado de argumentos de plantilla. Se llama especialización explícita.

La template<> El prefijo indica que la siguiente declaración de plantilla no toma parámetros de plantilla.

La especialización explícita se puede aplicar a:

  • Plantilla de función o clase
  • Función miembro de una plantilla de clase
  • Miembro de datos estáticos de una plantilla de clase
  • Clase miembro de una plantilla de clase
  • Plantilla de función miembro de una plantilla de clase &
  • Plantilla de clase miembro de una plantilla de clase

contestado el 21 de mayo de 12 a las 10:05

Es una especialización de plantilla en la que todos los parámetros de la plantilla están completamente especificados y no quedan parámetros en el <>.

Por ejemplo:

template<class A, class B>   // base template
struct Something
{ 
    // do something here
};

template<class A>            // specialize for B = int
struct Something<A, int>
{ 
    // do something different here
};

template<>                   // specialize both parameters
struct Something<double, int>
{ 
    // do something here too
};

contestado el 21 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.