【发布时间】:2013-10-16 16:05:13
【问题描述】:
我正在寻找使用 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);
【问题讨论】:
-
type-safety “仍然允许我直接对值进行操作”你是什么意思?如果存在从该类型到
float的隐式转换,则它不是类型安全的。如果没有,则不能以floats直接 对它们进行操作。你能提供一些例子吗? -
由于类型安全而无法编译的代码示例会很有帮助。
标签: c++ floating-point enumeration c++03