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));
}