在编译时获取枚举类大小,而无需定义其他元素
Get enum class size at compile time without defining additional element
一种常见的方法是将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++中不支持任何这样的事情,也没有一种简单直接的方法(数字限制可以,但前提是您的枚举值是连续的并且从零开始)。
有一些库,如更好的枚举,除名称到字符串转换等外,还提供确定枚举值的数量。
不过它们有点重,因为您需要大量的宏滥用来实现这一点。从积极的方面来说,您只需在编译时付出代价,而不是以二进制大小支付。
相关文章:
- 如何绘制自定义形状的元素?
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 从自定义类获取对象向量中的 max 元素
- 如何访问宏中定义的数组元素
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 从自定义数据类型向量中删除重复元素
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- C++ - 按自定义数据类型向量的值删除元素
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- const 数组,用于在数组长度定义中使用其元素或为模板参数提供值
- 如何找到具有用户定义谓词的向量的最大元素
- 使用自定义比较器C++映射,不插入所有元素
- 为什么可以在长度为 0 的数组中添加定义元素 C++.
- (XAML UWP)定义元素,包括跨多个页面(C )使用的事件
- 使用 C++ 中的自定义元素进行 Const 结构初始化
- 如何在int数组中查找用户定义元素的数量
- C++:如何在同一类的不同函数中定义元素