Rumah > pembangunan bahagian belakang > C++ > Bagaimana Secara Tersirat Menukar Enum yang Ditaip Kuat kepada Int dalam C?

Bagaimana Secara Tersirat Menukar Enum yang Ditaip Kuat kepada Int dalam C?

Susan Sarandon
Lepaskan: 2024-11-04 12:28:01
asal
686 orang telah melayarinya

How to Implicitly Convert Strongly Typed Enums to Ints in C  ?

Penukaran Tersirat Enum Ditaip Kuat kepada Int

Enum ditaip kuat, yang diperkenalkan dalam C 11, direka untuk mengelakkan penukaran tersirat kepada integer. Walau bagaimanapun, mungkin terdapat kes di mana anda ingin menukar nilai enum yang ditaip kuat kepada int tanpa hantaran yang jelas.

Untuk menangani perkara ini, beberapa pendekatan telah dicadangkan:

  1. Menggunakan Fungsi:

Anda boleh menentukan fungsi yang melakukan penukaran. Contohnya:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

template <typename E>
int to_int(E e) {
  return static_cast<int>(e);
}

int main() {
  // Use the to_int function to convert the strongly typed enum value b::B2 to int
  std::cout << to_int(b::B2) << std::endl;
}</code>
Salin selepas log masuk
  1. Menggunakan Fungsi dengan Potongan Argumen Templat:

Untuk memudahkan sintaks, anda boleh menggunakan templat fungsi yang secara automatik menyimpulkan jenis enum:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

template <typename E>
constexpr typename std::underlying_type<E>::type get_underlying(E e) noexcept {
  return static_cast<typename std::underlying_type<E>::type>(e);
}

int main() {
  // Use the get_underlying function to convert the strongly typed enum value b::B2 to int
  std::cout << get_underlying(b::B2) << std::endl;
}</code>
Salin selepas log masuk
  1. Mencipta Makro:

Anda juga boleh menggunakan makro untuk menjadikan proses penukaran lebih ringkas :

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

#define TO_INT(e) static_cast<int>(e)

int main() {
  // Use the TO_INT macro to convert the strongly typed enum value b::B2 to int
  std::cout << TO_INT(b::B2) << std::endl;
}</code>
Salin selepas log masuk

Walaupun mungkin untuk menukar enum yang ditaip kuat kepada int tanpa hantaran eksplisit, adalah penting untuk ambil perhatian bahawa ini mungkin membawa kepada tingkah laku yang tidak diingini. Anda disyorkan untuk menggunakan hantaran eksplisit pada bila-bila masa yang sesuai untuk mengelakkan isu yang berpotensi.

Atas ialah kandungan terperinci Bagaimana Secara Tersirat Menukar Enum yang Ditaip Kuat kepada Int 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