patrones diseño c++ design-patterns templates

Diseño moderno de C++ Programación genérica y patrones de diseño aplicados



patrones de diseño c++ (8)

Alrededor de 2005 empecé a utilizar plantillas de expresión y varios trucos en tiempo de compilación para crear bibliotecas de uso muy expresivo, como lenguajes internos específicos de dominio incrustados en C ++. En particular, una cosa bastante completa de SQL incorporado, similar a lo que ha salido como Linq en .NET.

Para los usuarios, está bien. Pero para cualquiera que, aparte de mí, tratara de mantenerlo, presentaba una curva de aprendizaje masivamente empinada. Ese es el problema con eso; Como cualquier técnica "inteligente", reduce la cantidad de personas que pueden mantenerla.

Esto está bien para las bibliotecas de clases de uso generalizado, que los usuarios en general nunca necesitan entender. Pero para bibliotecas "internas" que son propiedad de un equipo específico, es probable que todas necesiten parchearlo o extenderlo con sensatez. Las posibilidades más arcanas de las plantillas de C ++ parecen excluir esto, en mi experiencia.

Aunque fue muy divertido.

Tal vez haya comprado este libro para nuestro grupo en la empresa para mejorar nuestras habilidades de diseño y, en última instancia, tener mejores prácticas de programación. A medida que lo leo, encuentro, en su mayoría, un conjunto de ingeniosos trucos que se pueden usar con la plantilla, y no estoy seguro de si vale la pena, y no es perjudicial, incorporarlo a nuestro código, introduciendo así la complejidad / legibilidad y la imposibilidad de mantenimiento del código. .

Me gustaría saber de los practicantes de seguimiento, ¿qué usas de ese libro? ¿Qué es relevante e importante para el desarrollo profesional de software, qué se debe evitar?

¿Pensamiento general sobre este libro y cómo encaja en el desarrollo de software de sistemas a gran escala (en el mismo libro, me encanta el libro de John Lakos)?

¿Qué es el efecto Alexandrescu?


En mi humilde opinión, leer (¡y comprender!) El primer capítulo del libro es útil (creo que incluso está disponible en línea de forma gratuita). El resto del libro describe los aspectos internos de la biblioteca de Loki y realmente no lo recomiendo.


Experimenté algunas reacciones groseras de parte de la gente cuando afirmé que utilizaba elementos del diseño Modern C ++. Primero, los comentarios de la WTF. A esto le siguieron los comentarios de "no intentes ser demasiado inteligente". Entonces, una mejor comprensión de las ideas. Y luego, finalmente, la aceptación de las ideas hasta el punto de que sean parte del vocabulario común.

Asegúrese de tener varias copias de este libro a la mano. Lo ideal es comprar una copia para cada desarrollador. Además, hasta que esto se convierta en un vocabulario común entre los desarrolladores, cite el patrón / idioma y las páginas relevantes en sus comentarios.


Fuera de los usos de plantillas estándar, la operación que me parece más útil sobre la información que se habla sobre la programación genérica de C ++ es la capacidad de usar plantillas para crear errores de tiempo de compilación para escenarios de código no válido. Una vez que aprendas a hacerlo, puedes ser muy eficiente para convertir una clase de lo que sería un error en tiempo de ejecución en un error de compilación.

He tenido mucho éxito haciendo eso en el trabajo. Seguro que produce mensajes completamente ilegibles y mis compañeros de trabajo ocasionalmente pasan y dicen "¿qué diablos es eso?". Pero cada vez que era un error y no podían compilarlo. También comento fuertemente los errores particulares con la esperanza de que sea moderadamente comprensible.


No he usado Loki, pero he usado activamente el impulso en mi trabajo anterior. Boost ha implementado muchas ideas de este bonito libro;

Las cosas de este libro no están diseñadas para su uso en Business Logic, deben implementarse en bibliotecas (Boost, Loki, algo de su propiedad) y bibliotecas utilizadas en Business Logic. Esto es una cosa diferente "usando estos trucos en el código" o "implementa una biblioteca separada usando este truco y usando hermosas bibliotecas en la mayoría de tu código (por ejemplo, boost :: bind - implementación fea pero de uso agradable - pero casi nunca ves esta implementación) "

También este libro demuestra una poderosa meta-programación en c ++ y un buen entrenamiento para el cerebro.


Para mí fue una experiencia más amplia de la mente. Leí el libro y seguí aprendiendo detalles y trucos, algunos de los cuales he usado más adelante. Pero la parte más importante es que el diseño con mayúscula D se discute en el libro todo el tiempo (no se pretende hacer un juego de palabras con el lenguaje D).

El capítulo sobre punteros inteligentes cambia mi mentalidad de "proporcionar todas las funcionalidades posibles" a una más conservadora: considera lo que ofreces, ¿vale la pena? ¿Cómo puede romper el código? ¿Ayudará al usuario? ¿Hará que el código sea frágil al crear peligros sutiles?

La parte del diseño basado en políticas debería hacer que te preocupes al diseñar si tus clases podrían / ​​deberían dividirse mejor en unidades ortogonales más pequeñas. Mientras que en la mayoría de los casos no finalizo la división en todas esas clases de políticas, el código usualmente termina siendo más limpio a medida que las diferentes piezas ortogonales se enredan menos.

Oh, como Earwicker, mi primera reacción fue implementar cosas sofisticadas que realmente aceleraron parte del desarrollo, pero nuevamente, en la pequeña empresa en la que trabajo, soy la única capaz de mantenerlo y eso realmente es un problema. No lo hagas más. Se necesita dos veces el cerebro para depurar y mantener que el desarrollo.


Si su empresa / proyecto permite impulsar. Este libro te ayudará a descubrir algo de magia mágica solo para tu propia satisfacción.

Si su empresa / proyecto no permite impulsar. Este libro será una buena guía para recrear algunas partes de realce que necesita sobre todo como boost :: function.

Creo que en cada proyecto hay algún tipo de módulo de utilidad. Dicho libro lo ayudará a hacer que su ''utilidad'' sea más genérica y segura al tomar prestados algunos patrones sugeridos por los libros y los trucos de SFINAE.

Y, sobre todo, este libro mostrará cómo puede repensar algunos de los patrones de diseño de GOF que cambian el polimorfismo de tiempo de ejecución con estática.


  • ¿Qué uso directamente del libro? Nada, no uso Loki o Boost.
  • ¿Ha influido en mi código? En realidad no. Estaba familiarizado con el concepto de políticas antes de leer el libro.
  • ¿Vale la pena leerlo? ¡Seguro!