template<>
le dice al compilador que sigue una especialización de plantilla, específicamente una especialización completa . Normalmente, class A
tendría que ser algo como esto:
template<class T>
class A{
// general implementation
};
template<>
class A<int>{
// special implementation for ints
};
Ahora, cada vez que se utiliza A<int>
, se utiliza la versión especializada. También puede utilizarlo 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, sin embargo, no se debe especializar las funciones, como simple overloads are generally considered superior:
void foo(int i){
// better
}
Y ahora, para que sea una exageración, es la siguiente una especialización parcial:
template<class T1, class T2>
class B{
};
template<class T1>
class B<T1, int>{
};
Wo funciona de la misma manera que una especialización completa, solo que la versión especializada se usa siempre que el segundo parámetro de plantilla sea int
(por ejemplo, B<bool,int>
, B<YourType,int>
, etc.).
oh ... traté de googlearlo antes de publicarlo con "template <>", lo que no me da buenos resultados. Gracias por la palabra clave de búsqueda correcta. Pero creo que el SO tiene más buenas respuestas que él. – Vijay