¿La mejor introducción a la metaprogtwigción de plantillas C ++?

La metaprogtwigción estática (también conocida como “metaprogtwigción de plantillas“) es una excelente técnica de C ++ que permite la ejecución de progtwigs en tiempo de comstackción. Una vez que leí este ejemplo de metaprogtwigción canónica, se encendió una bombilla en mi cabeza:

#include  using namespace std; template struct factorial { enum { ret = factorial::ret * n }; }; template struct factorial { enum { ret = 1 }; }; int main() { cout << "7! = " << factorial::ret << endl; // 5040 return 0; } 

Si uno quiere aprender más acerca de la metaprogtwigción estática de C ++, ¿cuáles son las mejores fonts (libros, sitios web, material didáctico en línea, lo que sea)?

[Respondiendo mi propia pregunta]

Las mejores introducciones que he encontrado hasta ahora son el capítulo 10, “Metaprogtwigción estática en C ++” de la Progtwigción Generativa, Métodos, Herramientas y Aplicaciones por Krzysztof Czarnecki y Ulrich W. Eisenecker, ISBN-13: 9780201309775; y el capítulo 17, “Metaprogtwigs” de C ++ Templates: The Complete Guide, de David Vandevoorder y Nicolai M. Josuttis, ISBN-13: 9780201734843.

alt text http://sofes.miximages.com/metaprogramming/30676941.jpg alt text http://sofes.miximages.com/metaprogramming/31025235.jpg alt text http: // ak. buy.com/db_assets/prod_images/704/30680704.jpg alt text http://sofes.miximages.com/metaprogramming/39856218.jpg

Todd Veldhuizen tiene un excelente tutorial aquí .

Un buen recurso para la progtwigción en C ++ en general es el diseño moderno en C ++ de Andrei Alexandrescu, ISBN-13: 9780201704310. Este libro mezcla un poco de metaprogtwigción con otras técnicas de plantillas. Para la metaprogtwigción en particular, consulte las secciones 2.1 “Afirmaciones en tiempo de comstackció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 comstackción”, 2.9 ” NullType and EmptyType ” y 2.10 ” Escriba rasgos “.

El mejor recurso intermedio / avanzado que he encontrado es la metaprogtwigción de plantillas C ++ por David Abrahams y Aleksey Gurtovoy, ISBN-13: 9780321227256

Si prefiere solo un libro, obtenga las plantillas de C ++: la guía completa, ya que también es la referencia definitiva para las plantillas en general.

El libro Modern C ++ Design de Andrei Alexandrescu cubre una gran cantidad de este y otros trucos para un código C ++ moderno y rápido y eficiente, y es la base de la biblioteca Loki .

También vale la pena mencionar las bibliotecas Boost , que usan estas técnicas en gran medida y suelen ser de muy alta calidad para aprender (aunque algunas son bastante densas).

Diseño moderno en C ++ , un libro shiny y un patrón de diseño de Alexandrescu. Palabra de advertencia, después de leer este libro, dejé de hacer C ++ y pensé “¿Qué diablos? Puedo elegir un idioma mejor y obtenerlo gratis”.

Dos buenos libros que me vienen a la mente son:

  • Diseño moderno de C ++ / Andrei Alexandrescu (¡De hecho, tiene 7 años a pesar del nombre!)
  • Plantillas en C ++: The Complete Guide / Vandevoorde & Josuttis

Es un campo bastante profundo, por lo que un buen libro como uno de estos definitivamente se recomienda sobre sitios web. ¡Algunas de las técnicas más avanzadas te harán estudiar el código durante algún tiempo para descubrir cómo funcionan!

Modern C ++ es una de las mejores presentaciones que he leído. Cubre ejemplos útiles reales de metaprogtwigción de plantillas. También eche un vistazo a la biblioteca compañera Loki .

No habrá una gran lista de libros, ya que la lista de personas con mucha experiencia es limitada. La metaprogtwigción de plantillas comenzó de forma real en torno al primer Taller de progtwigción de plantillas de C ++ en 2000, y muchos de los autores mencionados hasta el momento asistieron. (IIRC, Andrei no.) Estos pioneros influyeron mucho en el campo, y básicamente lo que debe escribirse ahora está escrito. Personalmente, recomendaría Vandevoorde & Josuttis. Alexandrescu es un libro difícil si eres nuevo en el campo.

Los documentos originales de Veldhuizen eran buenos. Si desea un libro completo, 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 de C ++ de Alexandrescu.

google Alexandrescu, Modern C ++ Design: Progtwigción genérica y patrones de diseño aplicados