static_cast浮点到枚举

时间:2018-10-08 14:29:51

标签: c++ dictionary enums floating-point static-cast

假设我有一个枚举:

enum FRACTION {
    WHOLE,
    HALF,
    THIRD,
    QUARTER,
    FRACTION_SIZE
};

现在,我想取一个分数的浮点分母并将其强制转换,所以我想要:

  • [{0.5F1.5F)映射到WHOLE
  • [{1.5F2.5F)映射到HALF
  • [{2.5F3.5F)映射到THIRD
  • [{3.5F4.5F)映射到QUARTER

给出float foo,我不能这样做:

static_cast<FRACTION>(round(foo))

因为我得到了错误:

  

错误C2440:static_cast:无法从float转换为FRACTION

我可以做2个static_caststatic_cast<FRACTION>(static_cast<int>(round(foo))),也可以用map来制定一个lower_bound解决方案。但是,这两个看上去都很难看。 没有提供更多直接转换的规定吗?

1 个答案:

答案 0 :(得分:2)

您希望函数执行此操作:

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