Biblioteca de enumeración reflexiva en tiempo de compilación con sintaxis limpia, en un único archivo de encabezado y sin dependencias.
En C++11, todo se puede utilizar en tiempo de compilación. Puede convertir sus enumeraciones, recorrerlas, encontrar su máximo, aplicar convenciones estáticamente y pasar los resultados como argumentos de plantilla o funciones constexpr
. Toda la reflexión está disponible para sus necesidades de metaprogramación.
La interfaz es la misma para C++98: solo debe usar la mayor parte únicamente en tiempo de ejecución. Esta biblioteca proporciona enumeraciones con alcance y tamaño, algo que no está integrado en C++98.
Consulte la página del proyecto para obtener la documentación completa.
Simplemente agregue enum.h
a su proyecto.
iostream
. La mayor limitación es que la macro BETTER_ENUM
no se puede utilizar dentro de una clase. Esto parece difícil de eliminar. Existe una solución alternativa con typedef
(o C++ 11 using
):
BETTER_ENUM (SomePrefix_Color, uint8_t , Red, Green, Blue)
struct triplet {
typedef SomePrefix_Color Color;
Color r, g, b;
};
triplet::Color color;
Sin embargo, puedes usar BETTER_ENUM
dentro de un espacio de nombres.
La macro tiene un límite flexible de 64 constantes declaradas. Puedes ampliarlo siguiendo estas instrucciones. En última instancia, el número de constantes está limitado por el recuento máximo de argumentos macro del compilador.
En algunos casos, es necesario anteponer constantes como Channel::Red
con un +
para promoverlas explícitamente al tipo Channel
. Por ejemplo, si estás haciendo una comparación:
channel == +Channel::Red
En msvc, es posible que deba habilitar la advertencia C4062 para verificar la exhaustividad de los casos switch
.
La versión original de la biblioteca fue desarrollada por el autor en el invierno de 2012-2013 en Hudson River Trading, como reemplazo de un generador más antiguo llamado BETTER_ENUM
.