Si bien la revisión de un viejo código C++, me encontré con varios bitflags definido como enumeraciones.Tipo safe (r) bitflags en C++?
enum FooFlags
{
FooFlag1 = 1 << 0,
FooFlag2 = 1 << 1,
FooFlag3 = 1 << 2
// etc...
};
Esto no es raro, pero me molesta que tan pronto como comienzas a combinar banderas, pierdes la información del tipo.
int flags = FooFlag1 | FooFlag2; // We've lost the information that this is a set of flags relating to *Foo*
algunas búsquedas en SO mostró que yo no soy el onlyone molestado por esto.
Una alternativa es declarar como banderas o #defines integrales const, por lo que las operaciones bit a bit no se transformarían el tipo (probablemente). El problema con esto es que permite que nuestro bit se mezcle con banderas no relacionadas, a través de ints u otras enums.
Estoy familiarizado con std::bitset y boost::dynamic_bitset, pero ninguno está diseñado para solucionar mi problema. Lo que estoy buscando es algo así como C# 's FlagsAttribute.
Mi pregunta es, ¿qué otras soluciones están ahí por una (más) de tipo establecidos segura de bitflags?
voy a publicar mi propia solución a continuación.
Cualquier posibilidad de un ejemplo de uso para su aplicación? – Eric
@Eric, siento que sería bastante directo. ¿Qué estás buscando exactamente? – luke
Un ejemplo sencillo de declarar una enumeración 'E', instancias de un' 'Flagset, y su uso. Claro, podría resolverlo, pero un ejemplo mejoraría esta respuesta. –
Eric