让我们I成为一个整体类型.现在假设我有一个enum class my_enum_class : I,可能不连续的值.现在我得到了一些I价值.如何检查它是否是枚举的值my_enum_class?
对类似问题的答案(对于C语言)假设值是连续的,并且可以添加"虚拟"上限值,并检查0和该值之间的范围; 这与我的情况无关.还有另一种方法吗?
没有内置的方法来做到这一点.所有Is都是"有效"值my_enum_class,因此您无法对基础类型执行任何操作.至于针对I枚举器列表验证s,没有反射就没有办法做到这一点.
根据上下文,我倾向于构建一个静态std::unordered_set(并对其进行查找),或者有一个函数列出所有我的枚举器switch(并返回falseiff输入不匹配它们),或者只是不打扰,而是记录某处将未列举的my_enum_class值传递给我的函数应被视为狡猾的欺骗并且具有未指定的行为.
最终,这一切都源于这样一个事实:枚举应该在更广泛的完全有效状态中列出"常用的方便命名的值",而不是仅包含完全约束的常量集的类型.我们几乎都滥用枚举.