gpt4 book ai didi

C++ "Floating Point Enum"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:01 24 4
gpt4 key购买 nike

我正在寻找使用 C++03 标准的解决方案(几年来我一直被迫使用该版本的标准)。也欢迎 C++11 的解决方案,但不会“接受”作为此问题的答案。

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

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

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);

最佳答案

someone must already have an elegant solution to this problem

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

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);

关于C++ "Floating Point Enum",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com