Menyesuaikan Enum Bendera dalam C
Dalam C , penghitungan (enum) ialah alat berkuasa untuk mewakili nilai diskret. Walau bagaimanapun, sintaks enum standard tidak mempunyai mekanisme terbina dalam untuk menganggapnya sebagai bendera. Artikel ini meneroka cara melaksanakan enum seperti bendera dalam C tanpa bergantung pada perpustakaan luaran.
Masalah:
Pertimbangkan contoh berikut:
enum AnimalFlags { HasClaws = 1, CanFly = 2, EatsFish = 4, Endangered = 8 }; int seahawkFlags = CanFly | EatsFish | Endangered;
Apabila anda cuba untuk menetapkan nilai bitwise ATAU kepada enum, pengkompil menimbulkan ralat disebabkan oleh ketidakpadanan penukaran int/enum.
Penyelesaian:
Penyelesaian terletak pada mentakrifkan 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)); } // Define other operators as needed int seahawkFlags = animalFlags::CanFly | AnimalFlags::EatsFish | AnimalFlags::Endangered;
Dengan menyediakan operator bitwise , enum boleh dimanipulasi dengan cara seperti bendera. Selain itu, penggunaan keselamatan jenis memastikan bahawa hanya gabungan bendera yang sah diberikan kepada pembolehubah enum.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Flag Enums dalam C tanpa Perpustakaan Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!