información general sobre las plantillas:
Las plantillas son útiles en cualquier momento que necesita usar el mismo código, pero que operan en diferentes tipos de datos, donde se sabe que los tipos en tiempo de compilación. Y también cuando tienes cualquier tipo de objeto contenedor.
Un uso muy común es para casi cualquier tipo de estructura de datos. Por ejemplo: listas enlazadas, listas doblemente enlazadas, árboles, intentos, tablas hash, ...
Otro uso muy común es para los algoritmos de clasificación.
Una de las principales ventajas del uso de plantillas es que puede eliminar la duplicación de código. La duplicación de código es una de las cosas más importantes que debe evitar al programar.
Puede implementar una función Máx como una macro o una plantilla, pero la implementación de la plantilla sería segura y, por lo tanto, mejor.
Y ahora en las cosas interesantes:
Véase también template metaprogramming, que es una forma de pre-evaluación de código en tiempo de compilación en lugar de en tiempo de ejecución. La metaprogramación de plantillas solo tiene variables inmutables y, por lo tanto, sus variables no pueden cambiar. Debido a esta plantilla, la metaprogramación puede verse como un tipo de programación funcional.
Consulte este ejemplo de metaprogramación de plantillas de Wikipedia. Muestra cómo se pueden usar las plantillas para ejecutar código en tiempo de compilación. Por lo tanto, en tiempo de ejecución tiene una constante precalculada.
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
int x = Factorial<4>::value; // == 24
int y = Factorial<0>::value; // == 1
}
Ya. excelente ejemplo. Gracias. – EvilTeach