Personnalisation des énumérations de drapeaux en C
En C , les énumérations (énumérations) sont des outils puissants pour représenter des valeurs discrètes. Cependant, la syntaxe standard des énumérations ne dispose pas d'un mécanisme intégré pour les traiter comme des indicateurs. Cet article explore comment implémenter des énumérations de type drapeau en C sans recourir à des bibliothèques externes.
Problème :
Considérez l'exemple suivant :
enum AnimalFlags { HasClaws = 1, CanFly = 2, EatsFish = 4, Endangered = 8 }; int seahawkFlags = CanFly | EatsFish | Endangered;
Lorsque vous essayez d'attribuer des valeurs OR au niveau du bit à une énumération, le compilateur génère des erreurs en raison de la conversion int/enum incompatibilités.
Solution :
La solution réside dans la définition d'opérateurs au niveau du bit pour l'énumération :
enum AnimalFlags { HasClaws = 1, CanFly = 2, EatsFish = 4, Endangered = 8 }; inline AnimalFlags operator|(AnimalFlags a, AnimalFlags b) { return static_cast<AnimalFlags>(static_cast<int>(a) | static_cast<int>(b)); } // Define other operators as needed int seahawkFlags = animalFlags::CanFly | AnimalFlags::EatsFish | AnimalFlags::Endangered;
En fournissant des opérateurs au niveau du bit, l'énumération peut être manipulé à la manière d’un drapeau. De plus, l'utilisation de la sécurité de type garantit que seules les combinaisons d'indicateurs valides sont affectées à la variable enum.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!