the template guide geeksforgeeks example c++ templates

template - typedef c++



¿Cuál es el significado de la plantilla<> con corchetes angulares vacíos en C++? (3)

template<> class A{ //some class data };

He visto este tipo de código muchas veces. ¿Cuál es el uso de la template<> en el código anterior? ¿Y cuáles son los casos en los que necesitamos ordenar su uso?


No se ve bien Ahora, podrías haber escrito en su lugar:

template<> class A<foo> { // some stuff };

... que sería una especialización de plantillas para el tipo foo.


template<> introduce una especialización total de una plantilla. Tu ejemplo en sí mismo no es realmente válido; necesita un escenario más detallado antes de que sea útil:

template <typename T> class A { // body for the general case }; template <> class A<bool> { // body that only applies for T = bool }; int main() { // ... A<int> ai; // uses the first class definition A<bool> ab; // uses the second class definition // ... }

Parece extraño porque es un caso especial de una característica más poderosa, que se llama "especialización parcial".


template<> le dice al compilador que sigue una especialización de plantilla, específicamente una especialización completa . Normalmente, la class A debería verse así:

template<class T> class A{ // general implementation }; template<> class A<int>{ // special implementation for ints };

Ahora, cuando se usa A<int> se usa la versión especializada. También puede usarlo para especializar funciones:

template<class T> void foo(T t){ // general } template<> void foo<int>(int i){ // for ints } // doesn''t actually need the <int> // as the specialization can be deduced from the parameter type template<> void foo(int i){ // also valid }

Normalmente, no deberías especializar funciones, ya que las sobrecargas simples generalmente se consideran superiores :

void foo(int i){ // better }

Y ahora, para hacerlo exagerado, la siguiente es una especialización parcial :

template<class T1, class T2> class B{ }; template<class T1> class B<T1, int>{ };

Funciona de la misma manera que una especialización completa, solo que la versión especializada se utiliza siempre que el segundo parámetro de plantilla sea un int (por ejemplo, B<bool,int> , B<YourType,int> , etc.).