假设我有一个向量的别名:
typedef std::vector<double> PlanetData;
我希望它的字段可以通过一些键访问:
double x = planet_data[PlanetDataKeys::PosX]; //planet_data is of type PlanetData
我怎样才能实现它?
我可以在命名空间内定义一个枚举:
namespace PlanetDataKeys {
enum {
PosX = 0,
PosY = 1
};
}
但enum class
更安全:
enum class PlanetDataKeys {
PosX = 0,
PosY = 1
};
enum class
但是,由于禁用了对类型的隐式转换int
,因此需要编写:
double x = planet_data[static_cast<int>(PlanetDataKeys::PosX)];
这有点尴尬。
在这种情况下哪种方法更好,为什么?
编辑混叠向量的一些解释:
在实际代码中,PlanetData 有大约 7 个字段,如果我决定扩展它可能会更多。我在解析 form 字符串时创建了它的一个实例data_string = "date: 2903248.12343, position=[124543254.1343214,123213.12341,63456.1234], velocity=[..."
。这就是为什么我希望它成为一个向量:使用类似的东西planet_data.push_back(ParseNextDouble(data_string));