我正在编写一个简单的转换程序,我想创建类似于此的东西:
//Ratios of a meter
enum Unit_Type
{
CENTIMETER = 0.01, //only integers allowed
METER = 1,
KILOMETER = 1000
};
是否有一个简单的数据结构可以让我像这样组织我的数据?
答案 0 :(得分:0)
是否有简单的数据结构......
不像您想要对Unit_Type
那样简单。您当然可以创建Units_Of_Distance
类和一些名为const
,centimetre
,metre
的{{1}}个实例。 - 将您的数字传递给构造函数。
如果你不想从头开始写这样的东西,或者想要一些更强大的东西,那么Kerrek和Angew的评论就是好的领导......
答案 1 :(得分:0)
不是真的。虽然C ++ 11引入了一些really neat new things for enums,例如特别是能够为它们分配一些特定的内部数据类型(如char
),没有办法添加浮点数或任何其他非整数类型。
根据您实际尝试的内容,我会使用一些简单的旧结构:
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;