Имея перечисление «черного ящика», можно ли проверить, является ли предоставленный интеграл действительным членом перечисления в C ++? - PullRequest
0 голосов
/ 17 марта 2019

Я пишу EnumSet класс для проекта.Я хотел бы иметь метод EnumSet::AllOf(), если это возможно, как в Java.Очевидный способ сделать это - перебрать каждый член std::underlying_type и попробовать привести его к классу enum, затем перейти от первого элемента, где это возможно, к последнему.

Вы не являетесьучитывая, что является самым низким или самым высоким элементом перечисления, поэтому вы должны искать во всем пространстве.

Возможно ли это вообще?Если да, то как?

РЕДАКТИРОВАТЬ ДЛЯ ЯРКОСТИ: я ищу что-то вроде

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
}
...