programacion - ¿La mejor introducción a la metaprogramación de plantillas C++?
programacion ats funciones (8)
La metaprogramación estática (también conocida como "metaprogramación de plantillas") es una excelente técnica de C ++ que permite la ejecución de programas en tiempo de compilación. Una vez que leí este ejemplo de metaprogramación canónica, se encendió una bombilla en mi cabeza:
#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 acerca de la metaprogramación estática de C ++, ¿cuáles son las mejores fuentes (libros, sitios web, material didáctico en línea, lo que sea)?
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!
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).
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.
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 forma real en torno al primer Taller de programació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.
google Alexandrescu, Modern C ++ Design: Programación genérica y patrones de diseño aplicados
Diseño moderno en C ++ , un libro brillante 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".
Modern C ++ es una de las mejores presentaciones que he leído. Cubre ejemplos útiles reales de metaprogramación de plantillas. También eche un vistazo a la biblioteca compañera Loki .
[Respondiendo mi propia pregunta]
Las mejores introducciones que he encontrado hasta ahora son el capítulo 10, "Metaprogramación estática en C ++" de la Programación Generativa, Métodos, Herramientas y Aplicaciones por Krzysztof Czarnecki y Ulrich W. Eisenecker, ISBN-13: 9780201309775; y el capítulo 17, "Metaprogramas" de C ++ Templates: The Complete Guide, de David Vandevoorder y Nicolai M. Josuttis, ISBN-13: 9780201734843.
alt text http://ak.buy.com/db_assets/prod_images/941/30676941.jpg alt text http://ak.buy.com/db_assets/prod_images/235/31025235.jpg alt text http: // ak. buy.com/db_assets/prod_images/704/30680704.jpg alt text http://ak.buy.com/db_assets/prod_images/218/39856218.jpg
Todd Veldhuizen tiene un excelente tutorial here .
Un buen recurso para la programación en C ++ en general es el diseño moderno en C ++ de Andrei Alexandrescu, ISBN-13: 9780201704310. Este libro mezcla un poco de metaprogramación con otras técnicas de plantillas. Para la metaprogramación en particular, consulte las secciones 2.1 "Afirmaciones 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
and EmptyType
" y 2.10 " Escriba rasgos ".
El mejor recurso intermedio / avanzado que he encontrado es la metaprogramació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.