El libro C ++ Templates: The Complete Guide , (c) 2002, me parece muy atractivo, pero como tiene 12 años, me preocupa que pueda estar desactualizado. Hay algunas reseñas de Amazon muy favorables con fecha tan reciente como hace un año, y no veo ningún otro título muy reciente sobre plantillas de C ++. ¿Alguien sabe si un libro sobre plantillas publicado en 2002 (a diferencia de un libro específicamente sobre el STL) tendría sintaxis o conceptos que han sido reemplazados o añadidos por, por ejemplo, C ++ 11?
Lo siguiente es de la descripción del libro de Amazon :
Las plantillas se encuentran entre las características más poderosas de C ++, pero con demasiada frecuencia se descuidan, se malinterpretan y se usan incorrectamente. Plantillas C ++: la guía completa proporciona a los arquitectos e ingenieros de software una comprensión clara de por qué, cuándo y cómo usar plantillas para construir y mantener un software más limpio, más rápido e inteligente de manera más eficiente.
Las plantillas de C ++ comienzan con un tutorial perspicaz sobre conceptos básicos y características del lenguaje. El resto del libro sirve como referencia integral, enfocándose primero en los detalles del lenguaje, luego en una amplia gama de técnicas de codificación y finalmente en aplicaciones avanzadas para plantillas. Los ejemplos utilizados en todo el libro ilustran conceptos abstractos y demuestran las mejores prácticas.
Los lectores aprenden
- Los comportamientos exactos de las plantillas.
- Cómo evitar las dificultades asociadas con las plantillas
- Modismos y técnicas, desde lo básico hasta lo previamente indocumentado
- Cómo reutilizar el código fuente sin amenazar el rendimiento o la seguridad
- Cómo aumentar la eficiencia de los programas C ++
- Cómo producir software más flexible y mantenible
Respuestas:
Actualizado (2016/08/24)
Artículo recomendado con enfoque en C ++ 11:
Una introducción al concepto SFINAE de C ++: introspección en tiempo de compilación de un miembro de la clase (Jean Guegant)
Como aprendiz de la metaprogramación de plantillas de C ++ hace unos meses, todavía recomendaría leer este libro.
No incluye C ++ 11, pero presenta la sintaxis y las especificaciones de C ++ sobre cómo un compilador debe procesar el código de plantilla. El libro cubre muchas esquinas menos conocidas que serán cruciales si necesita utilizar plantillas C ++ sustancialmente, ya sea que se trate de metaprogramación o no.
Las partes que faltan de C ++ 11 son:
is_*
mostrará una lista de .decltype
. http://en.cppreference.com/w/cpp/language/decltypedeclval
. http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardHay una construcción que va a ver una gran cantidad de código que se pega en Stackoverflow:
std::enable_if
. Sin embargo, en la práctica, encuentro esto bastante difícil de usar, debido a la Regla de Una Definición y SFINAE. Esta es la razón por la cual este libro es importante, porque trata los conceptos básicos.Si usa plantillas de C ++ sustancialmente en una biblioteca multiplataforma, deberá compilar su código en diferentes compiladores. Esto se debe a que cada compilador tiene un nivel diferente de cumplimiento de la especificación C ++. El código que compila bien en uno puede ser rechazado por el otro, y ocasionalmente el compilador que lo acepta es el que rompe la especificación.
Aquí están mis notas de lectura cuando reviso este libro. Espero que sea de ayuda.
Notas de lectura de libros - Plantillas C ++ - La guía completa (2003)
Ch 5 y Ch 6: estos dos capítulos son muy deprimentes. Es posible que desee omitirlo y luego regresar cuando esté emocionalmente listo para usar plantillas.
Parte II (Ch 8 - Ch ???) La sección de cosas avanzadas.
Ch 8 - Más reglas
El capítulo 8.3.1 (página 106 en la 12ª impresión) menciona SFINAE por primera vez.
Capítulo 11 - Deducción de argumentos de plantilla
Capítulo 12.4 en adelante: especialización de plantilla de clase parcial.
Parte III (Ch 17 - Ch ???) Metaprogramación.
Ch 17 - Comienza con la programación funcional introductoria.
App. A.3 - Regla de una definición (ODR) en detalle.
fuente
constexpr
y, por lo tanto, recomendará TMP para toda la metaprogramación, incluso en los casos en que lasconstexpr
funciones y los tipos serían mucho más adecuados.