Допустим, у меня есть перечисление:
enum FRACTION {
WHOLE,
HALF,
THIRD,
QUARTER,
FRACTION_SIZE
};
Теперь я хочу взять знаменатель с плавающей запятой дроби и привести его, поэтому я хочу:
- [
0.5F
, 1.5F
) для сопоставления с WHOLE
- [
1.5F
, 2.5F
) для сопоставления с HALF
- [
2.5F
, 3.5F
)для сопоставления с THIRD
- [
3.5F
, 4.5F
) для сопоставления с QUARTER
Учитывая float foo
Я не могу сделать это:
static_cast<FRACTION>(round(foo))
Потому что я получаю ошибку:
ошибка C2440: static_cast
: невозможно преобразовать из float
в FRACTION
Я могу сделать 2 static_cast
с: static_cast<FRACTION>(static_cast<int>(round(foo)))
Или я мог бы, вероятно, разработать map
решение с lower_bound
.Но оба из них кажутся безобразными.Разве у c ++ нет условий для более прямого преобразования?