是否可以确定 c++ enum class
的基数:
enum class Example { A, B, C, D, E };
我尝试使用 sizeof
,但是,它返回枚举元素的大小。
sizeof(Example); // Returns 4 (on my architecture)
有没有获得基数的标准方法(在我的示例中为 5)?
原文由 bquenin 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否可以确定 c++ enum class
的基数:
enum class Example { A, B, C, D, E };
我尝试使用 sizeof
,但是,它返回枚举元素的大小。
sizeof(Example); // Returns 4 (on my architecture)
有没有获得基数的标准方法(在我的示例中为 5)?
原文由 bquenin 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是在 2020 年对我有用的解决方案,使用 Visual Studio 2019
#define Enum(Name, ...) \
struct Name { \
enum : int { \
__VA_ARGS__ \
}; \
private: struct en_size { int __VA_ARGS__; }; \
public: static constexpr size_t count = sizeof(en_size)/sizeof(int); \
}
用法:
struct S {
Enum(TestEnum, a=11, b=22, c=33);
void Print() {
std::cout << TestEnum::a << '\n';
std::cout << TestEnum::b << '\n';
std::cout << TestEnum::count << '\n';
}
};
int main()
{
S d;
d.Print();
return 0
}
输出:
11
22
3
原文由 The Oathman 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
不是直接的,但您可以使用以下技巧:
然后基数可用作
static_cast<int>(Example::Count)
。当然,这只有在让枚举的值从 0 开始自动分配的情况下才能很好地工作。如果不是这样,您可以手动将正确的基数分配给 Count,这实际上与必须维护一个单独的常量没有什么不同反正:
一个缺点是编译器允许你使用
Example::Count
作为枚举值的参数——所以如果你使用它要小心! (不过,我个人认为这在实践中不是问题。)