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 .