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

Get enum class size at compile time without defining additional element

本文关键字:定义 元素 其他 编译 获取 枚举      更新时间:2023-10-16

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

还有其他方法吗?我能做吗

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

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

您要

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

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

您的建议不会达到您的预期。可悲的是,C++中不支持任何这样的事情,也没有一种简单直接的方法(数字限制可以,但前提是您的枚举值是连续的并且从零开始)。

有一些库,如更好的枚举,除名称到字符串转换等外,还提供确定枚举值的数量。
不过它们有点重,因为您需要大量的宏滥用来实现这一点。从积极的方面来说,您只需在编译时付出代价,而不是以二进制大小支付。