Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memetakan C Enum dengan Mudah kepada Rentetan Menggunakan Templat?

Bagaimanakah Saya Boleh Memetakan C Enum dengan Mudah kepada Rentetan Menggunakan Templat?

Barbara Streisand
Barbara Streisandasal
2024-12-08 03:27:09477semak imbas

How Can I Easily Map C   Enums to Strings Using Templates?

Cara Mudah Memetakan Enum C kepada Rentetan

Latar Belakang:

Anda mempunyai jenis enum yang ditakrifkan dalam pengepala perpustakaan luaran dan ingin menukar nilai enum kepada rentetan yang boleh dibaca manusia. Penyelesaian brute-force melibatkan fungsi yang ditakrifkan secara manual, tetapi penyelesaian yang elegan dicari menggunakan templat.

Menggunakan std::map:

Pendekatan mudah ialah menggunakan std::map untuk mengaitkan nilai enum dengan literal rentetan.

Syntactic Sugar dengan map_init class:

Untuk memudahkan sintaks, kelas map_init boleh dibuat untuk membolehkan rantaian tugasan nilai:

map_init(MyMap)(eValue1, "A")
    (eValue2, "B")
    (eValue3, "C");

Templat kelas ini mengembalikan objek map_init_helper yang menyimpan merujuk kepada peta dan menyediakan fungsi operator() untuk menambah pasangan nilai kunci.

Contoh Penggunaan:

Untuk menggunakan pendekatan ini, anda boleh:

  1. Buat peta menggunakan std::map MyMap;.
  2. Mulakan peta dengan map_init(MyMap) diikuti dengan panggilan operator() berantai.
  3. Dapatkan semula perwakilan rentetan nilai enum menggunakan getStringValue(enumValue).

Alternatif Pendekatan:

Jika nama enum itu sendiri harus digunakan sebagai rentetan, rujuk [siaran ini](pautan ke siaran yang berkaitan).

Ringkasan:

Penyelesaian ini menyediakan cara yang mudah dan cekap untuk memetakan C enum kepada rentetan, menawarkan alternatif yang lebih elegan kepada kaedah kekerasan. Kelas map_init memudahkan lagi sintaks, menjadikannya lebih mudah untuk bekerja dengan peta nilai enum dan perwakilan rentetannya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memetakan C Enum dengan Mudah kepada Rentetan Menggunakan Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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