Podemos ver el compilador como una máquina virtual que produce código ensamblador. Esto nos permite hacer cálculos complejos en tiempo de compilación en lugar de en tiempo de ejecución. Un ejemplo muy usado es calcular un número de la sucesión de Fibonacci en tiempo de compilación:
1 #include <iostream>
2
3 template <int N> struct fib {
4 static const int result = fib<N-1>::result + fib<N-2>::result;
5 };
6
7 template <>
8 struct fib<0> {
9 static const int result = 0;
10 };
11
12 template <>
13 struct fib<1> {
14 static const int result = 1;
15 };
16
17 int main() {
18 std::cout << "Fib(15) = " << fib<15>::result << std::endl;
19 return 0;
20 }
En la wikipedia podemos encontrar una descripción un poco más extensa.
4 comentarios:
Modern C++ design se dedica casi exclusivamente a ese tema. Está curioso, pero tiene poca utilidad real :/
Le echaré a un ojo a ese libro, que iba buscando algo mas de info al respecto.
Te aseguro javi que los templates pueden servirte para hacer un codigo altamente generico (sin cosas feas como void*). P.ej: boost (smart_ptr, un parser que escribes las reglas con templates, y tela de cosas mas)
pues al menos solo pediria presentar algoritmos que sean eficientes, debido a q si hacen el analisis del costo computacional de la serie de fibonacci en forma recursiva no es nada eficiente, claro q no se nota mucho eso al ejecutar el programa en una computadora de estos tiempos... pero el objetivo de la programacion es llegar al punto de no meterse a un computador y escribir lo que a uno se le cruze por la cabeza, sino hacer un previo estudio del algoritmo a usar, disculpen por salirme del tema pero tenia que dejar en claro que no se caiga en un error tremendo como en este ejemplo de la serie de fibonacci recursivo
G@b®!eL
No creo que javi diga que los templates no sean utiles. Metaprogramacion no es lo mismo que plantillas, es un uso que se le da a las plantillas.
Publicar un comentario