简体   繁体   English

static_cast浮点到枚举

[英]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.5F1.5F )映射到WHOLE
  • [ 1.5F , 2.5F ) to map to HALF [ 1.5F2.5F )映射到HALF
  • [ 2.5F , 3.5F ) to map to THIRD [ 2.5F3.5F )映射到THIRD
  • [ 3.5F , 4.5F ) to map to QUARTER [ 3.5F4.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 from float to FRACTION 错误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_caststatic_cast<FRACTION>(static_cast<int>(round(foo)))或者我可以用lower_bound制定出一个map解决方案。 But both of those seem ugly. 但是,这两个看上去都很难看。 Does not have a provision for more direct conversion? 是否没有提供更直接转换的规定?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM