Преобразуване на int в enum с обхват на C++11

Бих искал да преобразувам int в стойност на enum с обхват на C++11. Например, мога да прочета целочислени стойности от база данни или XML файл и да ги преобразувам в стойности enum с обхват в моето C++ приложение.

Кой е най-добрият начин за справяне с целочислени стойности, които не са дефинирани в рамките на enum с обхват?

Помислете за следния код, който се изпълнява на VS2013.

#include <iostream>

enum class Fruit : int { Apple=0, Pear=1, Orange=2 };

int main(int argc, char* argv[])
{
    int n=3;
    Fruit fruit = static_cast<Fruit>(n);
    std::cout << "The value of n is: " << static_cast<int>(fruit) << std::endl;

    return 0;
}

Резултатът е: The value of n is: 3

Въпреки това, 3 не е предварително дефинирана постоянна стойност на Fruit. Горният код правилен ли е C++11?


person Jamerson    schedule 18.05.2015    source източник
comment
Кодът е правилен C++11. Какво искате да се случи, когато целочислената стойност е извън диапазона?   -  person Jesse Good    schedule 19.05.2015
comment
Ако целочислената стойност е извън диапазона, бих повдигнал грешка.   -  person Jamerson    schedule 19.05.2015