Maison > développement back-end > C++ > Comment implémenter des énumérations de drapeaux en C sans bibliothèques externes ?

Comment implémenter des énumérations de drapeaux en C sans bibliothèques externes ?

Mary-Kate Olsen
Libérer: 2024-12-16 01:32:09
original
328 Les gens l'ont consulté

How to Implement Flag Enums in C   without External Libraries?

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal