C“浮点枚举”

新手上路,请多包涵

我正在寻找使用 C++03 标准的解决方案(我被限制使用该版本的标准已有好几年了)。也欢迎 C++11 的解决方案,但不会被“接受”作为这个问题的答案。

什么是一种简单、简洁的方法,我可以将一组相关的常量浮点值表示为单个类型(类似于枚举)以确保类型安全而不会产生大量开销,并且仍然允许我直接将值作为浮点数进行操作?

最终结果是我希望能够执行以下操作:

 enum FloatingPointEnum
{
   VALUE1 = 0.1234f,
   ...
   VALUEN = 0.6789f
};

float SomeFunction(FloatingPointEnum value)
{
    float new_value;
    /* perform some operation using "value" to calculate "new_value" */
    new_value = static_cast<float>(value); // <- a simplistic example
    return new_value;
}

虽然我可以想到几种解决方案,但它们都不像我想要的那样干净/简单/直接,而且我认为一定有人已经有了一个优雅的解决方案来解决这个问题(但我似乎无法在搜索中找到一个)。

编辑:

我希望使用未直接指定为枚举类型中的值的值对 SomeFunction 的以下调用无法编译:

 float nonEnumeratedValue = 5.0f
SomeFunction(nonEnumeratedValue);

原文由 statueuphemism 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 533
1 个回答

有人必须已经有一个优雅的解决方案来解决这个问题

有很多问题没有优雅的解决方案(还有很多根本没有解决方案)。是什么让你认为这个问题有一个?您可以获得的最接近的是使用包装类。

 class FloatingPointEnum {
    float f;
    FloatingPointEnum(float arg) : f(arg) {}
public:
    static const FloatingPointEnum Value1;
    static const FloatingPointEnum Value2;
    operator float() const { return f; }
};
const FloatingPointEnum FloatingPointEnum::Value1(0.1234f);
const FloatingPointEnum FloatingPointEnum::Value2(0.6789f);

原文由 Puppy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏