假设我有一个枚举:
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++没有提供更多直接转换的规定吗?
答案 0 :(得分:2)
您希望函数执行此操作:
FRACTION classifyDenominator(float denominator) {
assert(denominator >= 0.5f && denominator < 4.5f);
denominator -= 0.5f;
return static_cast<FRACTION>(int(denominator));
}