C++ 静态\u将浮点转换为枚举

C++ 静态\u将浮点转换为枚举,c++,dictionary,enums,floating-point,static-cast,C++,Dictionary,Enums,Floating Point,Static Cast,假设我有一个枚举: enum FRACTION { WHOLE, HALF, THIRD, QUARTER, FRACTION_SIZE }; 现在我想取一个分数的浮点分母并进行转换,所以我想: [0.5F,1.5F)映射到整个 [1.5F,2.5F)映射到HALF [2.5F,3.5F)映射到第三个 [3.5F,4.5F)映射到季度 给定float foo我不能这样做: static_cast(圆形(foo)) 因为我得到了错误: 错误C2440

假设我有一个枚举:

enum FRACTION {
    WHOLE,
    HALF,
    THIRD,
    QUARTER,
    FRACTION_SIZE
};
现在我想取一个分数的浮点分母并进行转换,所以我想:

  • [
    0.5F
    1.5F
    )映射到整个
  • [
    1.5F
    2.5F
    )映射到
    HALF
  • [
    2.5F
    3.5F
    )映射到第三个
  • [
    3.5F
    4.5F
    )映射到
    季度
给定
float foo
我不能这样做:

static_cast(圆形(foo))
因为我得到了错误:

错误C2440:
static\u cast
:无法从
float
转换为
FRACTION


我可以做2个
static\u cast
s:
static\u cast(static\u cast(round(foo))
,或者我可以用
lower\u-bound
制定一个
map
解决方案。但这两个方法看起来都很难看。没有更直接转换的规定吗?

您想要一个函数来实现它:

FRACTION classifyDenominator(float denominator) {
  assert(denominator >= 0.5f && denominator < 4.5f);
  denominator -= 0.5f;
  return static_cast<FRACTION>(int(denominator));
}
分数分类分母(浮点分母){
断言(分母>=0.5f和分母<4.5f);
分母-=0.5f;
返回静态_cast(int(分母));
}

分数(int(round(foo)))
,使用构造函数(C++的一种规定),无需强制转换?只需放置
静态\u强制转换(static\u强制转换(round(foo)))函数中的“< /代码>”和“丑”消失了。C++没有内置的机制。@ Rukes,我的意思是……本质上是一样的事情?@ JoaAthMeMe < Cuth>
相反,甚至不需要功能和消除丑陋。
FRACTION classifyDenominator(float denominator) {
  assert(denominator >= 0.5f && denominator < 4.5f);
  denominator -= 0.5f;
  return static_cast<FRACTION>(int(denominator));
}