首页 > 解决方案 > 给定一个“黑盒”枚举,是否可以检查提供的积分是否是 C++ 中枚举的有效成员?

问题描述

我正在EnumSet为一个项目写一个类。如果可能的话,我想有一个EnumSet::AllOf()方法,比如在 Java 中。解决此问题的明显方法是遍历 的每个成员std::underlying_type并尝试将其强制转换为枚举类,然后从可能的第一个元素到最后一个元素。

您不知道枚举的最低或最高元素是什么,因此您必须搜索整个空间。

这甚至可能吗?如果是这样,怎么做?

编辑清晰:我正在寻找类似的东西

try {
    std::dynamic_cast<std::underlying_type<E>::type>(e);
    return true; // Cast succeeded, enum is valid
} catch (SOME_KIND_OF_EXCEPTION e) {
    return false; // Cast failed, enum is invalid
}

标签: c++enumsenum-classenumset

解决方案


推荐阅读