Dalam C#, menggunakan atribut [Bendera] pada enum membolehkan mereka dianggap sebagai bendera boolean. Walau bagaimanapun, mereplikasi gelagat ini dalam C memerlukan pendekatan yang berbeza.
Satu kaedah adalah untuk menentukan operator bitwise untuk enum:
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)); }
Ini membenarkan operasi bitwise pada enum, seperti:
seahwk.flags = CanFly | EatsFish | Endangered;
Walau bagaimanapun, isu keselamatan jenis yang berpotensi timbul apabila memberikan nilai bukan enum kepada pembolehubah enum. Untuk menangani perkara ini, pertimbangkan perkara berikut:
struct AnimalFlagsGuard { enum : AnimalFlags m_flags; }; AnimalFlagsGuard seahawk; seahwak.m_flags = CanFly | EatsFish | Endangered;
Dengan melampirkan enum dalam struct, penetapan nilai bukan enum dihalang pada peringkat jenis. Pendekatan ini mengekalkan keselamatan jenis dan membolehkan pengendalian enum yang lebih berstruktur dan terkapsul sebagai bendera.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Enum dengan Selamat sebagai Bendera dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!