Нет встроенного способа сделать это. Все I
являются «действительными» значениями my_enum_class
, поэтому вы ничего не можете сделать с базовым типом. Что касается проверки I
s по списку перечислителей, то без размышления просто невозможно это сделать.
В зависимости от контекста я склонен либо строить статический std::unordered_set
(и выполнять поиск в нем), либо иметь функцию, перечисляющую все мои перечислители в switch
(и возвращающую false
, если входные данные не соответствуют ни одному из них), или просто не беспокойтесь , вместо этого где-то документально подтверждая, что передача не перечислимого значения my_enum_class
в мои функции будет считаться обманом и иметь неопределенное поведение.
В конечном итоге все это вытекает из того факта, что перечисления должны перечислять «общие удобно именуемые значения» в более широком диапазоне полностью допустимых состояний, а не тип, состоящий только из полностью ограниченного набора констант. Мы почти все злоупотребляем перечислениями.