Creo que quería la segunda plantilla que se invoca cada vez T
es int
. John has shown you cómo hacerlo, y Benoit has shown you lo que necesita hacer para llamar realmente a la segunda función.
Su problema es que al tratar de especializantest<>()
para un tipo específico (int
) utilizando la sintaxis completamente equivocado, usted ha golpeado accidentalmente otra forma sintáctica válida. (Tipo de mala suerte.) Esa segunda plantilla de función está usando un parámetro de plantilla sin tipo de modelo. Además de los tipos, puede usar otras cosas como parámetros de plantilla. Entre otros (funciones, plantillas) también puede usar constantes integrales, como int
. Si hubiera tratado de hacer esto con, por ejemplo, double
, el código no se hubiera podido compilar.
Su segunda plantilla test<>()
es sobrecarga del primero que se puede usar con enteros constantes. Es por eso que compilaría test<0>()
de Benoit.
Para una especialización completa (no hay parcial especialización para las plantillas de función, sólo hay una sobrecarga; plantillas de clase, sin embargo, tienen la especialización parcial), usted tiene que proporcionar siempre una lista de parámetros plantilla vacía (template<>
) y poner los tipos para especializarse detrás del identificador test<int>
.
En su ejemplo int() se interpreta como un tipo int (void) (es decir, una función). Comparar con std :: tr1 :: function. –
FuleSnabel