Reflexión en C++26 (Parte I)

Información para el lector
Tiempo estimado de lectura: 30 minutos
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:

  1. 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.
  2. 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.
  3. Un amplio conjunto de operaciones consteval en la cabecera <meta> para trabajar con dichas reflexiones (incluyendo la derivación de otras reflexiones).
  4. Los denominados splicers [:…:] (más formalmente, splice-expressions), que permiten generar construcciones sintácticas a partir de reflexiones.