No es una sintaxis que estoy familiarizado, pero lo vi en another question, siendo un ejemplo:En C++, ¿qué significa la plantilla <>?
¿Qué template<>
realidad quiere decir, sin ningún tipo de plantilla/parámetro?
No es una sintaxis que estoy familiarizado, pero lo vi en another question, siendo un ejemplo:En C++, ¿qué significa la plantilla <>?
¿Qué template<>
realidad quiere decir, sin ningún tipo de plantilla/parámetro?
Es una especialización. template<>
significa que la especialización en sí misma no está templada, es decir, es una especialización explícita, no una especialización parcial.
Puede decir que solo es la sintaxis requerida.
La sintaxis normal sería template< typename T > struct Allowed
;
Porque sabemos que en este caso T es std :: string no hay nada para poner dentro de los paréntesis angulares, pero la plantilla de la palabra y los paréntesis angulares todavía son necesarios porque escribir struct Allowed<std::string>
por sí sola no implicaría que son especializando la plantilla pero simplemente creando una instancia con std :: string como tipo. (La palabra "struct" no es necesaria para hacer eso, pero todavía está permitida).
Es una especialización de plantilla. El caso típico sería la especialización parcial:
#include <iostream>
template<class T1, class T2> struct foo
{
void doStuff() { std::cout << "generic foo "; }
};
template<class T1>
struct foo<T1, int>
{
void doStuff() { std::cout << "specific foo with T2=int"; }
};
Como se puede ver, la especialización elimina un elemento a partir de los parámetros de plantilla y explícitamente establece un tipo en lugar de la retirada. Esto significa que si sólo hay un tipo de plantilla, la <>
sólo se convertirá en vacío:
template<class T1> struct bar
{
void doStuff() { std::cout << "generic bar"; }
};
template<>
struct bar<int>
{
void doStuff() { std::cout << "specific bar with T1=int"; }
};
"plantilla <> significa que la especialización en sí no se templated". Esto no es completamente correcto, ya que se aplica solo para ese ejemplo en particular. Por ejemplo: 'plantilla estructura A {plantilla void f(); }; plantilla <> plantilla void A :: f() {} '. En este otro ejemplo, la especialización explícita del miembro sigue siendo una plantilla. (Es un poco quisquilloso, pero es importante saberlo). –
No entiendo la respuesta. ¿Podrías enmendar para mostrar cómo se diferencia entre parcial y especial? – wallyk