Información para el lector
Tiempo estimado de lectura: 30 minutos
Nivel: Avanzado (C++26, metaprogramación, reflexión estática)
Nivel: Avanzado (C++26, metaprogramación, reflexión estática)
Esta nueva serie de posts pretende introducir al lector en las nuevas capacidades de reflexión estática que formarán parte del próximo estándar ISO C++26, tal y como fueron introducidas en la propuesta P2996 [1] y que ya han sido incorporadas (con algunas modificaciones y extensiones) al draft del estándar [2]. Por reflexión estática entendemos aquí la capacidad del programa de analizar su propia estructura en tiempo de compilación y producir código derivado de ella.
Esta nueva meta-programación reflexiva se basa en:
- La representación de elementos del programa mediante expresiones constantes (constant‑expressions) que producen valores de reflexión —reflexiones— del tipo opaco std::meta::info.
- El operador unario de reflexión (prefijo ^^), capaz de proyectar múltiples construcciones gramaticales del lenguaje —como namespace-names, type-ids, id-expressions o el espacio de nombres global ::— a sus correspondientes reflexiones.
- Un amplio conjunto de operaciones consteval en la cabecera <meta> para trabajar con dichas reflexiones (incluyendo la derivación de otras reflexiones).
- Los denominados splicers [:…:] (más formalmente, splice-expressions), que permiten generar construcciones sintácticas a partir de reflexiones.
