[英]static_cast float to Enumeration
Let's say that I have an enumeration: 假设我有一个枚举:
enum FRACTION {
WHOLE,
HALF,
THIRD,
QUARTER,
FRACTION_SIZE
};
Now I want to take a floating point denominator of a fraction and cast it, so I want: 现在,我想取一个分数的浮点分母并进行转换,所以我想要:
0.5F
, 1.5F
) to map to WHOLE
0.5F
, 1.5F
)映射到WHOLE
1.5F
, 2.5F
) to map to HALF
1.5F
, 2.5F
)映射到HALF
2.5F
, 3.5F
) to map to THIRD
2.5F
, 3.5F
)映射到THIRD
3.5F
, 4.5F
) to map to QUARTER
3.5F
, 4.5F
)映射到QUARTER
Given float foo
I cannot do this: 给定
float foo
我不能这样做:
static_cast<FRACTION>(round(foo))
Because I get the error: 因为我得到错误:
error C2440:
static_cast
: cannot convert fromfloat
toFRACTION
错误C2440:
static_cast
:无法从float
转换为FRACTION
I can do 2 static_cast
s: static_cast<FRACTION>(static_cast<int>(round(foo)))
Or I could probably work out a map
solution with lower_bound
. 我可以做2个
static_cast
: static_cast<FRACTION>(static_cast<int>(round(foo)))
或者我可以用lower_bound
制定出一个map
解决方案。 But both of those seem ugly. 但是,这两个看上去都很难看。 Does c++ not have a provision for more direct conversion?
c ++是否没有提供更直接转换的规定?
You want a function to do it: 您想要一个函数来做到这一点:
FRACTION classifyDenominator(float denominator) {
assert(denominator >= 0.5f && denominator < 4.5f);
denominator -= 0.5f;
return static_cast<FRACTION>(int(denominator));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.