Acabo de comenzar mi viaje como desarrollador de C ++, y recientemente he estado investigando un tema llamado metaprogramación. Hasta ahora, he revisado mucha información sobre el tema y tengo pocas preguntas.
Uso de Reflection en c ++: ¿es posible? Según mi comprensión, la reflexión es una técnica de metaprogramación que tiene la capacidad de manipular el estado de un programa, y su manipulación puede ser introspección o introcesión.
¿Cuál es la diferencia entre arquitectura reflexiva y arquitectura de nivel meta? ¿En qué categoría se encuentra la arquitectura de metaprogramación?
La metaprogramación viene en dos niveles: nivel meta y nivel base. Según tengo entendido, el programa objeto o el sistema bajo investigación es el nivel base, y el metaprograma que operará sobre el sistema bajo investigación es el nivel meta. ¿Estoy en lo correcto?
También ayúdame proporcionando algunas pautas sobre cómo trabajar en la metaprogramación de plantillas en C ++.
¿Puede sugerirme algunos ejemplos viables que pueda buscar para poner en práctica esta técnica de programación?
Respuestas:
La metaprogramación simplemente significa que tiene los medios para escribir código que escribe otro código (en un sentido amplio). C ++ hace esto a través del mecanismo de plantilla, que es básicamente un lenguaje de macros de tipo seguro. Es perfectamente posible simplemente aplicar el paso de expansión de plantilla, y el resultado será un código C ++ válido sin plantilla.
La reflexión es la capacidad de un lenguaje de programación y / o entorno de tiempo de ejecución para inspeccionar (y a menudo modificar) sus propios elementos de lenguaje en tiempo de ejecución. Típicamente, los lenguajes reflexivos ofrecen estructuras de datos que representan elementos del lenguaje como clases, métodos, variables, parámetros, etc., así como rutinas o clases para inspeccionarlos, modificarlos y crearlos. La capacidad de modificación hace que la reflexión sea un tipo de metaprogramación, ya que le permite escribir código que genera otro código.
Otros ejemplos de metaprogramación incluyen generadores de código, binarios auto modificables (aunque estos ya no son tan populares hoy como lo fueron hace dos décadas), macros C; se podría argumentar que el currículum y técnicas similares de programación funcional también son una especie de metaprogramación.
fuente
2-3. No sé, espera otra respuesta que ayude con eso :-)
La meta programación usando plantillas C ++ es muy poderosa, pero también compleja. La expansión de la plantilla requiere un estilo funcional de programación en lugar de la programación imperativa que usa C ++. Si no tiene experiencia previa en programación funcional, le recomendaría que se desvíe y aprenda algunos pasos básicos, haskell o esquemas.
fuente