Si se me permite hacer lo siguiente:
template <typename T = int>
class Foo{
};
¿Por qué no se me permite hacer lo siguiente en main?
Foo me;
Pero debo especificar lo siguiente:
Foo<int> me;
C ++ 11 introdujo argumentos de plantilla predeterminados y en este momento están siendo difíciles de entender.
Foo
podría ser un identificador de plantilla o podría ser una instanciación explícita en función de si hay un argumento predeterminado. Mejor mantener la sintaxis de instanciación explícita. Piense en ello como una funciónfoo
con un único parámetro predeterminado. No puedes llamarlo asífoo
, lo llamas confoo()
. Tiene sentido mantener esto consistente.foo
ninguno de los dos;Foo
Sin embargo, puede nombrar una clase sin argumentos .<>
ya no es necesario en este caso. Mira mi respuesta para más detalles.Con C ++ 17, puedes hacerlo.
Esta característica se denomina deducción de argumento de plantilla de clase y agrega más flexibilidad a la forma en que puede declarar variables de tipos con plantilla .
Entonces,
ahora es código legal de C ++ .
fuente
No tienes permitido hacer eso, pero puedes hacerlo
y luego hacer
fuente
typedef Foo<float> Fooo;
sin un tipo predeterminado?using Fooo = Foo<>;
Puedes usar lo siguiente:
Y tenga que
int
ser su argumento de plantilla. Los corchetes angulares son necesarios y no pueden omitirse.fuente