Доброго времени суток. Ситуация следующая, с сервера приходит пакет, в определённом поле которого есть байт, который я хочу передавать в метод как член определённого enum’а. Для приведения я использую статик каст, но я задумался о том, что будет, если сервер пришлёт мне некорректные данные и значение в этом байте окажется за пределами enum’а. Накидал тестовый код и как оказалось С++ спокойно это проглотит и не чего не бросит (.
enum class MyEnum {
Red = 1,
Black = 2,
White = 3
};
void Foo(MyEnum val) {
std::cout << static_cast
int main()
{
Foo(MyEnum::Red);
Foo(static_cast
Есть ли какие-то стандартные средства эффективно (с точки зрения производительности) проверить вхождение значения в конкретный enum и дать мне возможность бросит исключение. Если их нет, то как это сделать, не перелопачивая весь enum руками. И можно ли как то сделать foreach обход enuma не городя огород (что то типа for (auto i : MyEnum) ...)?
p.s. С++ 14 компилятор GCC 6.3.
Ответ
Я тут для вас кое что сооброзил, не знаю насколько поможет. Вам придется просто после добавления в перечислении, добавлять и в оператор ++
#include
int main()
{
int n = 5, index;
Some t = Some::min;
while (int(t) != n && t != Some::end) {
++t;
++index;
}
if (t == Some::end)
cout << "indefined" ;
else
cout << index; // выдаст 2
return 0;
}
Ну можно это все проделать в какой то функции, или на основе этого создавать класс - итератор. Тут index будет иметь значение как индекс в векторах...
Комментариев нет:
Отправить комментарий