在编译时获取枚举类大小而不定义其他元素

时间:2016-04-22 18:30:22

标签: c++ c++11

一种常见的方法是将MAX添加为最后一个元素,但并不总是如此。

还有其他方法吗?我可以吗

constexpr size_t enum_size = sizeof(EnumClassName) / sizeof(std::underlying_type(EnumClassName)?

这样安全吗?不确定我是否需要担心填充。我的印象是不应该为枚举类填充,因为枚举项大小都是相同的。假设我只使用uint8_t或uint16_t作为基础类型。

2 个答案:

答案 0 :(得分:1)

您正在寻找的内容(或者至少是大多数MAX枚举者提供的内容)是最大的实际枚举值。这与枚举可以存储的最大可能值不同。后者将由std::numeric_limits<typename std::underlying_type<Enumeration>::type>::max()定义。

无法自动获取枚举中最大的枚举器值。好吧,不是自动的。

答案 1 :(得分:1)

你的建议不符合你的期望。遗憾的是,在C ++中不支持任何这样的东西,也没有一种简单直接的方法(数值限制可以,但只有只有如果你的枚举值是连续的并且从零开始)

Better Enums之类的库,其中包括名称到字符串转换等,也可以确定枚举值的数量。
它们有点沉重,因为你需要一个宏观滥用的 loooooooooooot 来实现它。从积极的方面来说,您只需在编译时支付价格,而不是二进制大小。