Pustaka enum waktu kompilasi reflektif dengan sintaksis yang bersih, dalam satu file header, dan tanpa ketergantungan.
Di C++11, semuanya dapat digunakan pada waktu kompilasi. Anda dapat mengonversi enum, mengulanginya, menemukan nilai maksimalnya, menerapkan konvensi secara statis, dan meneruskan hasilnya sebagai argumen templat atau ke fungsi constexpr
. Semua refleksi tersedia untuk kebutuhan metaprogramming Anda.
Antarmukanya sama untuk C++98 — Anda hanya perlu menggunakan sebagian besarnya pada waktu proses saja. Pustaka ini menyediakan enum dengan cakupan dan ukuran, sesuatu yang tidak ada di dalam C++98.
Lihat halaman proyek untuk dokumentasi lengkap.
Cukup tambahkan enum.h
ke proyek Anda.
iostream
. Batasan terbesarnya adalah makro BETTER_ENUM
tidak dapat digunakan di dalam kelas. Hal ini tampaknya sulit untuk dihilangkan. Ada solusi dengan typedef
(atau C++11 using
):
BETTER_ENUM (SomePrefix_Color, uint8_t , Red, Green, Blue)
struct triplet {
typedef SomePrefix_Color Color;
Color r, g, b;
};
triplet::Color color;
Namun, Anda dapat menggunakan BETTER_ENUM
di dalam namespace.
Makro memiliki batas lunak 64 konstanta yang dideklarasikan. Anda dapat memperpanjangnya dengan mengikuti petunjuk berikut. Pada akhirnya, jumlah konstanta dibatasi oleh jumlah argumen makro maksimum kompiler Anda.
Dalam beberapa kasus, konstanta seperti Channel::Red
perlu diberi awalan +
untuk secara eksplisit mempromosikannya ke tipe Channel
. Misalnya, jika Anda melakukan perbandingan:
channel == +Channel::Red
Di msvc, Anda mungkin perlu mengaktifkan peringatan C4062 untuk memeriksa kelengkapan switch
.
Versi asli perpustakaan ini dikembangkan oleh penulis pada musim dingin 2012-2013 di Hudson River Trading, sebagai pengganti generator lama bernama BETTER_ENUM
.