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
的替代品。