作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个简单的转换程序,我想创建与此类似的东西:
//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/
我是一名优秀的程序员,十分优秀!