static_cast浮点到枚举

static_cast float to Enumeration

本文关键字:枚举 cast static      更新时间:2023-10-16

假设我有一个枚举:

enum FRACTION {
WHOLE,
HALF,
THIRD,
QUARTER,
FRACTION_SIZE
};

现在我想取一个分数的浮点分母并铸造它,所以我想要:

  • [0.5F1.5F( 映射到WHOLE
  • [1.5F2.5F( 映射到HALF
  • [2.5F3.5F( 映射到THIRD
  • [3.5F4.5F( 映射到QUARTER

鉴于float foo我不能这样做:

static_cast<FRACTION>(round(foo))

因为我收到错误:

错误 C2440:static_cast:无法从float转换为FRACTION

我可以做 2static_casts:static_cast<FRACTION>(static_cast<int>(round(foo)))或者我可能会用lower_bound制定一个map解决方案.但这两个看起来都很丑陋。难道 c++ 没有提供更直接的转换吗?

你需要一个函数来做这件事:

FRACTION classifyDenominator(float denominator) {
assert(denominator >= 0.5f && denominator < 4.5f);
denominator -= 0.5f;
return static_cast<FRACTION>(int(denominator));
}