#include <iostream>
enum class BoardType : uint8_t {
Classic = 0,
Static = 1,
Smart = 2,
Bad = 255
};
BoardType Cast[UINT8_MAX]; // <- сюда просто забить константы -++
//
inline BoardType ToEnum(const uint8_t i) { //
BoardType Ret = Cast[i]; //
if (Ret == BoardType::Bad) throw std::range_error("Беда"); //
return Ret; //
} //
//
int main () { //
////// вместо инициализации ниже - ///////////////////////////////
for(auto i=0; i<UINT8_MAX; i++) Cast[i] = BoardType::Bad;
Cast[0] = BoardType::Classic;
Cast[1] = BoardType::Static;
Cast[2] = BoardType::Smart;
//////////////////////////////////////////////////////////////////
try {
std::cout << static_cast<int>(ToEnum(0)) << std::endl;
std::cout << static_cast<int>(ToEnum(1)) << std::endl;
std::cout << static_cast<int>(ToEnum(2)) << std::endl;
std::cout << static_cast<int>(ToEnum(3)) << std::endl;
} catch(std::range_error &e) {
std::cout << "range_error: " << e.what() << std::endl;
} catch(...) {
std::cout << "что-то совсем пошло не так" << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZW51bSBjbGFzcyBCb2FyZFR5cGUgOiB1aW50OF90IHsgCiAgQ2xhc3NpYyA9IDAsCiAgU3RhdGljID0gMSwKICBTbWFydCA9IDIsCiAgQmFkID0gMjU1ICAKfTsKCkJvYXJkVHlwZSBDYXN0W1VJTlQ4X01BWF07ICAgICAvLyA8LSDRgdGO0LTQsCDQv9GA0L7RgdGC0L4g0LfQsNCx0LjRgtGMINC60L7QvdGB0YLQsNC90YLRiyAtKysKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCmlubGluZSBCb2FyZFR5cGUgVG9FbnVtKGNvbnN0IHVpbnQ4X3QgaSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvLwogIEJvYXJkVHlwZSBSZXQgPSBDYXN0W2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KICBpZiAoUmV0ID09IEJvYXJkVHlwZTo6QmFkKSB0aHJvdyBzdGQ6OnJhbmdlX2Vycm9yKCLQkdC10LTQsCIpOyAgICAgICAvLwogIHJldHVybiBSZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwppbnQgbWFpbiAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAvLy8vLy8g0LLQvNC10YHRgtC+ICDQuNC90LjRhtC40LDQu9C40LfQsNGG0LjQuCDQvdC40LbQtSAtIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIAogIGZvcihhdXRvIGk9MDsgaTxVSU5UOF9NQVg7IGkrKykgQ2FzdFtpXSA9IEJvYXJkVHlwZTo6QmFkOwogIENhc3RbMF0gPSBCb2FyZFR5cGU6OkNsYXNzaWM7CiAgQ2FzdFsxXSA9IEJvYXJkVHlwZTo6U3RhdGljOwogIENhc3RbMl0gPSBCb2FyZFR5cGU6OlNtYXJ0OyAKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIAogIHRyeSB7ICAKICAgIHN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDxpbnQ+KFRvRW51bSgwKSkgPDwgc3RkOjplbmRsOyAgCiAgICBzdGQ6OmNvdXQgPDwgc3RhdGljX2Nhc3Q8aW50PihUb0VudW0oMSkpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDxpbnQ+KFRvRW51bSgyKSkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PGludD4oVG9FbnVtKDMpKSA8PCBzdGQ6OmVuZGw7ICAKICB9IGNhdGNoKHN0ZDo6cmFuZ2VfZXJyb3IgJmUpIHsKICAgIHN0ZDo6Y291dCA8PCAicmFuZ2VfZXJyb3I6ICIgPDwgZS53aGF0KCkgPDwgc3RkOjplbmRsOyAgCiAgfSBjYXRjaCguLi4pIHsKICAgIHN0ZDo6Y291dCA8PCAi0YfRgtC+LdGC0L4g0YHQvtCy0YHQtdC8INC/0L7RiNC70L4g0L3QtSDRgtCw0LoiIDw8IHN0ZDo6ZW5kbDsgIAogIH0gICAgCiAgcmV0dXJuIDA7ICAgICAgICAKfQo=