static_cast переходит в перечисление - PullRequest
0 голосов
/ 08 октября 2018

Допустим, у меня есть перечисление:

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.Но оба из них кажутся безобразными.Разве у нет условий для более прямого преобразования?

1 Ответ

0 голосов
/ 08 октября 2018

Вы хотите, чтобы функция делала это:

FRACTION classifyDenominator(float denominator) {
  assert(denominator >= 0.5f && denominator < 4.5f);
  denominator -= 0.5f;
  return static_cast<FRACTION>(int(denominator));
}
...