Bagaimana untuk Menukar Enum yang Ditaip Kuat kepada Integer dalam C?

Mary-Kate Olsen
Lepaskan: 2024-11-08 20:48:02
asal
508 orang telah melayarinya

How to Convert Strongly Typed Enums to Integers in C  ?

Penukaran Tersirat Enum yang Ditaip Kuat kepada Int

Dalam C , enum yang ditaip kuat ialah ciri yang agak baharu yang menyediakan keselamatan yang dipertingkatkan berbanding dengan tradisional enums. Satu perbezaan antara jenis ini ialah enum yang ditaip kuat tidak boleh ditukar secara tersirat kepada integer. Tingkah laku ini sengaja untuk mengelakkan penukaran yang tidak diingini.

Walau bagaimanapun, dalam senario tertentu, anda mungkin perlu menukar nilai enum yang ditaip kuat kepada integer. Dalam kes ini, anda boleh menggunakan pengendali static_cast. Walau bagaimanapun, anda mesti menyatakan secara eksplisit jenis integer asas dalam pelakon.

<code class="cpp">enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  int value = static_cast<int>(b::B2); // Explicit cast required
  std::cout << foo(value) << std::endl;
}
Salin selepas log masuk

Jika anda memilih untuk tidak menyatakan jenis asas secara eksplisit, anda boleh menggunakan fungsi templat seperti ini:

<code class="cpp">template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept {
    return static_cast<typename std::underlying_type<E>::type>(e);
}

int main(void) {
  std::cout << foo(to_underlying(b::B2)) << std::endl; // No explicit cast needed
}</code>
Salin selepas log masuk

Dengan menggunakan fungsi templat ini, anda mengelak daripada menentukan jenis asas setiap kali anda perlu menukar nilai enum yang ditaip kuat kepada integer. Ia menyediakan penyelesaian yang lebih ringkas dan boleh diguna semula.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Enum yang Ditaip Kuat kepada Integer 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