Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Melaksanakan Fungsi Atribut [Bendera] C# untuk Enum dalam C ?

Bagaimanakah Saya Boleh Melaksanakan Fungsi Atribut [Bendera] C# untuk Enum dalam C ?

Linda Hamilton
Lepaskan: 2025-01-01 13:10:16
asal
951 orang telah melayarinya

How Can I Implement C#'s [Flags] Attribute Functionality for Enums in C  ?

Penghitungan sebagai Bendera dalam C

Menganggap Enum sebagai Bendera

Dalam C#, atribut [Flags] membenarkan penghitungan untuk dianggap sebagai bendera, menjadikan operasi seperti OR bitwise dan tugasan selamat jenis mudah. Walau bagaimanapun, dalam C , ciri ini tidak disokong secara semulajadi.

Mencipta Bendera Enum

Untuk mencipta bendera enum dalam C , satu kaedah adalah untuk menentukan operator bit untuk penghitungan secara manual. Ini melibatkan penciptaan operator seperti bitwise ATAU, bitwise DAN dan sebagainya, yang menukar nilai enum kepada integer, melaksanakan operasi dan kemudian menukar kembali kepada jenis enum.

Pemuatan Terlebih Operator Tersuai

Contoh operator tersuai yang terlebih muatan untuk bendera enum ialah:

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));
}
Salin selepas log masuk

Ini membenarkan operasi OR bitwise pada penghitungan AnimalFlags, pada asasnya meniru tingkah laku atribut [Flags] C#.

Keselamatan Jenis

Untuk menguatkuasakan keselamatan jenis dan mengelakkan tugasan yang tidak sah seperti seahawk.flags = HasMaximizeButton, pertimbangkan untuk menggunakan kelas pembalut templat atau teknik lain untuk memastikan bahawa hanya nilai enum yang sah diberikan kepada pembolehubah bendera.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Fungsi Atribut [Bendera] C# untuk Enum dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan