gpt4 book ai didi

c++ - 有没有办法为非整数创建枚举数据类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:10 25 4
gpt4 key购买 nike

我正在编写一个简单的转换程序,我想创建与此类似的东西:

//Ratios of a meter
enum Unit_Type
{
CENTIMETER = 0.01, //only integers allowed
METER = 1,
KILOMETER = 1000
};

是否有一种简单的数据结构可以让我像这样组织我的数据?

最佳答案

不是真的。虽然 C++11 引入了一些 really neat new things for enums ,例如特别是能够为它们分配一些特定的内部数据类型(如 char),无法添加 float 或任何其他非整数类型。

根据您实际尝试做的事情,我会为此使用一些普通的旧结构:

struct UnitInfo {
const char *name;
float ratio;
};

UnitInfo units[] = {
{"centimeter", 0.01f},
{"meter", 1},
{"kilometer", 1000},
{0, 0} // special "terminator"
};

然后您可以使用指针作为迭代器来迭代所有可用单元:

float in;
std::cout << "Length in meters: ";
std::cin >> in;

// Iterate over all available units
for (UnitInfo *p = units; *p; ++p) {
// Use the unit information:
// p[0] is the unit name
// p[1] is the conversion ratio
std::cout << (in / p[1]) << " " << p[0] << std::endl;
}

如果这是关于将这些比率与实际值(如 100 * CENTIMETER)一起使用,那么 C++11 的 user-defined literals可能适合你:

constexpr float operator"" _cm(float units) {
return units * .01f;
}

然后可以这样使用:

float distance = 150_cm;

关于c++ - 有没有办法为非整数创建枚举数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26503076/

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