Biblioteca enum reflexiva em tempo de compilação com sintaxe limpa, em um único arquivo de cabeçalho e sem dependências.
No C++ 11, tudo pode ser usado em tempo de compilação. Você pode converter suas enumerações, fazer um loop sobre elas, encontrar seu máximo, impor convenções estaticamente e transmitir os resultados como argumentos de modelo ou para funções constexpr
. Toda a reflexão está disponível para suas necessidades de metaprogramação.
A interface é a mesma para C++ 98 — você só precisa usar a maior parte dela apenas em tempo de execução. Esta biblioteca fornece enums com escopo e tamanho, algo não integrado ao C++ 98.
Veja a página do projeto para documentação completa.
Basta adicionar enum.h
ao seu projeto.
iostream
. A maior limitação é que a macro BETTER_ENUM
não pode ser usada dentro de uma classe. Isso parece difícil de remover. Existe uma solução alternativa com typedef
(ou 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;
Você pode, entretanto, usar BETTER_ENUM
dentro de um namespace.
A macro possui um limite flexível de 64 constantes declaradas. Você pode estendê-lo seguindo estas instruções. Em última análise, o número de constantes é limitado pela contagem máxima de argumentos de macro do seu compilador.
Em alguns casos, é necessário prefixar constantes como Channel::Red
com um +
para promovê-las explicitamente ao tipo Channel
. Por exemplo, se você estiver fazendo uma comparação:
channel == +Channel::Red
No msvc, pode ser necessário ativar o aviso C4062 para obter a verificação exaustiva do caso switch
.
A versão original da biblioteca foi desenvolvida pelo autor no inverno de 2012-2013 na Hudson River Trading, como substituto de um gerador mais antigo chamado BETTER_ENUM
.