“Plantillas C ++: la guía completa” (c) 2002: ¿actualizado con C ++ 11?

10

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
Cap
fuente
2
Como el lenguaje C ++ en sí mismo cambia solo lentamente (los cambios importantes se realizan solo cada 10 años) y sigue siendo en gran medida compatible con versiones anteriores, los libros sobre C ++ tampoco envejecen tan rápido.
Bart van Ingen Schenau

Respuestas:

12

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:


Hay 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 2.5 - Plantillas de funciones - Resumen
    • Resolución de sobrecarga y mejores prácticas.
  • Capítulo 3.3 - Especialización de plantillas de clase
  • Capítulo 3.4 - Especialización parcial
    • Ambigüedad (error ODR) y cómo resolverlo. ODR = regla de una definición
  • Capítulo 4.3 - Restricciones para parámetros de plantilla sin tipo
    • Ejemplo: literales de cadena con enlace externo
  • 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

    • Para un programador que ya esté familiarizado con todo el Ch 3 (plantillas de clase - conceptos básicos), los Ch 8.1 y 8.2 deben leerse inmediatamente después del Ch 3, porque las reglas adicionales son tan importantes y relevantes como las reglas básicas. Esto ahorrará algo de dolor.
  • El capítulo 8.3.1 (página 106 en la 12ª impresión) menciona SFINAE por primera vez.

  • Capítulo 8.3: esta sección presenta muchas circunstancias en las que la sustitución de argumentos de plantilla habría dado lugar a expansiones sintácticas sin sentido (y, por lo tanto, no serían válidas, lo que a cambio requiere SFINAE). Este capítulo tiene una curva de aprendizaje pronunciada incluso para los programadores experimentados de C ++.
  • Capítulo 11 - Deducción de argumentos de plantilla

    • Ch11 contiene algunos ejemplos de Deducción de Argumentos de Plantilla artificiales que son necesarios para comprender algunas de las aplicaciones SFINAE igualmente artificiales.
  • Capítulo 12.4 en adelante: especialización de plantilla de clase parcial.

    • Esto cubre la mecánica interna que a menudo se requiere en una aplicación SFINAE.

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.

rwong
fuente
3
El problema con una discusión anterior a C ++ 11 sobre TMP es que no cubrirá constexpry, por lo tanto, recomendará TMP para toda la metaprogramación, incluso en los casos en que las constexprfunciones y los tipos serían mucho más adecuados.
Ben Voigt