Maison >développement back-end >C++ >Comment puis-je utiliser les énumérations C comme indicateurs sans bibliothèques externes ?

Comment puis-je utiliser les énumérations C comme indicateurs sans bibliothèques externes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-13 00:35:15772parcourir

How Can I Use C   Enums as Flags Without External Libraries?

Utilisation des énumérations comme indicateurs en C sans bibliothèques externes

La possibilité de traiter les énumérations comme des indicateurs, disponible en C# via [Flags] attribut, est une fonctionnalité pratique pour représenter une combinaison de valeurs au niveau du bit. L'implémentation de cette fonctionnalité en C nécessite une approche légèrement différente.

Pour y parvenir, une méthode consiste à définir des opérateurs au niveau du bit pour l'énumération, fournissant ainsi un moyen sûr de type pour combiner les valeurs des indicateurs. Voici comment procéder :

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));
}

Définissez des opérateurs supplémentaires (par exemple, &, ^) selon vos besoins. Si la plage d'énumération dépasse la plage de int, ajustez les opérations de conversion en conséquence.

En utilisant cette approche, vous pouvez désormais utiliser les valeurs d'énumération comme indicateurs, garantissant ainsi la sécurité du type. Par exemple :

struct Animal
{
    AnimalFlags flags;
    ...
};

int main()
{
    Animal seahawk;
    seahawk.flags = CanFly | EatsFish | Endangered;
    // seahawk.flags = HasMaximizeButton; // Compile error
    ...
}

Cela vous permet de combiner en toute sécurité les valeurs des indicateurs et empêche les affectations incorrectes, comme l'attribution du drapeau de fenêtre HasMaximizeButton aux drapeaux de l'animal.

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!

Déclaration:
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