La metaprogramación estática (también conocida como "metaprogramación de plantilla") es una gran técnica de C ++ que permite la ejecución de programas en tiempo de compilación. Una bombilla se encendió en mi cabeza tan pronto como leí este ejemplo canónico de metaprogramación:
#include <iostream>
using namespace std;
template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };
template<>
struct factorial< 0 > { enum { ret = 1 }; };
int main() {
cout << "7! = " << factorial< 7 >::ret << endl; // 5040
return 0;
}
Si uno quiere aprender más sobre la metaprogramación estática de C ++, ¿cuáles son las mejores fuentes (libros, sitios web, cursos en línea, lo que sea)?
c++
templates
metaprogramming
jwfearn
fuente
fuente
Respuestas:
[Respondiendo a mi propia pregunta]
Las mejores introducciones que he encontrado hasta ahora son el capítulo 10, "Metaprogramación estática en C ++" de Programación generativa, métodos, herramientas y aplicaciones de Krzysztof Czarnecki y Ulrich W. Eisenecker, ISBN-13: 9780201309775; y el capítulo 17, "Metaprogramas" de plantillas de C ++: la guía completa de David Vandevoorder y Nicolai M. Josuttis, ISBN-13: 9780201734843.
Todd Veldhuizen tiene un excelente tutorial aquí .
Un buen recurso para la programación en C ++ en general es Modern C ++ Design de Andrei Alexandrescu, ISBN-13: 9780201704310. Este libro mezcla un poco de metaprogramación con otras técnicas de plantilla. Para la metaprogramación en particular, consulte las secciones 2.1 "Aserciones en tiempo de compilación", 2.4 "Asignación de constantes integrales a tipos", 2.6 "Selección de tipo", 2.7 "Detección de convertibilidad y herencia en tiempo de compilación", 2.9 "
NullType
yEmptyType
" y 2.10 "Rasgos de tipo ".El mejor recurso intermedio / avanzado que he encontrado es C ++ Template Metaprogramming de David Abrahams y Aleksey Gurtovoy, ISBN-13: 9780321227256
Si prefiere un solo libro, obtenga C ++ Templates: The Complete Guide, ya que también es la referencia definitiva para las plantillas en general.
fuente
El libro Modern C ++ Design de Andrei Alexandrescu cubre muchos de estos y otros trucos para un código C ++ moderno rápido y eficiente y es la base de la biblioteca Loki .
También vale la pena mencionar las bibliotecas Boost , que utilizan mucho estas técnicas y suelen ser de muy alta calidad para aprender (aunque algunas son bastante densas).
fuente
Modern C ++ Design , un libro brillante y un marco de patrones de diseño de Alexandrescu. Una advertencia, después de leer este libro dejé de hacer C ++ y pensé "Qué diablos, puedo elegir un idioma mejor y obtenerlo gratis".
fuente
Dos buenos libros que me vienen a la mente son:
Es un campo bastante profundo, por lo que definitivamente se recomienda un buen libro como uno de estos en los sitios web. ¡Algunas de las técnicas más avanzadas harán que estudies el código durante algún tiempo para descubrir cómo funcionan!
fuente
Modern C ++ es una de las mejores introducciones que he leído. Cubre ejemplos útiles reales de metaprogramación de plantillas. También eche un vistazo a la biblioteca complementaria Loki .
fuente
No habrá una gran lista de libros, ya que la lista de personas con mucha experiencia es limitada. La metaprogramación de plantillas comenzó de verdad alrededor del primer Taller de programación de plantillas en C ++ en 2000, y muchos de los autores nombrados hasta ahora asistieron. (IIRC, Andrei no lo hizo). Estos pioneros influyeron mucho en el campo, y básicamente lo que debería escribirse ahora está escrito. Personalmente, aconsejaría a Vandevoorde & Josuttis. Alexandrescu's es un libro difícil si eres nuevo en el campo.
fuente
Los papeles originales de Veldhuizen eran buenos. Si está interesado en un libro completo, entonces está el libro de Vandevoorde "Guía completa de plantillas de C ++". Y cuando esté listo para el curso de maestría, pruebe el diseño moderno en C ++ de Alexandrescu.
fuente
google Alexandrescu, Modern C ++ Design: Programación genérica y patrones de diseño aplicados
fuente