better enums
Better Enums 0.11.3
反射編譯時枚舉函式庫,具有乾淨的語法,位於單一頭檔中,且沒有相依性。
在C++11中,一切都可以在編譯時使用。您可以轉換枚舉,循環遍歷它們,找到它們的最大值,靜態強制約定,並將結果作為模板參數或傳遞給constexpr
函數。所有反射都可滿足您的元編程需求。
C++98 的介面是相同的——您只需在運行時使用它的大部分內容即可。該函式庫確實提供了範圍和大小的枚舉,但 C++98 中沒有內建這些東西。
請參閱項目頁面以取得完整文件。
只需將enum.h
添加到您的專案中即可。
iostream
一樣。最大的限制是BETTER_ENUM
巨集不能在類別內部使用。這似乎很難去除。有一個使用typedef
(或 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;
但是,您可以在命名空間內使用BETTER_ENUM
。
此巨集具有 64 個聲明常數的軟限制。您可以按照這些說明進行擴充。最終,常數的數量受到編譯器最大宏參數計數的限制。
在某些情況下,有必要在常數(例如Channel::Red
前面加上+
前綴,以明確將它們提升為Channel
類型。例如,如果您正在進行比較:
channel == +Channel::Red
在 msvc 上,您可能需要啟用警告 C4062 才能進行switch
case 詳盡檢查。
該庫的原始版本是作者於 2012-2013 年冬天在 Hudson River Trading 開發的,作為舊版生成器BETTER_ENUM
的替代品。