我有一个这样的枚举:
enum Field {
Foo,
Bar,
Baz,
// 50 more follow
}
我想将一些数据类型与每个值(Foo - uint,Bar - string等)相关联,并且我想创建一个类,其中包含与此枚举关联的类型的每个枚举值的字段。我还希望有一个通用的getter / setter,它允许在一组字段上进行原子操作。
有没有办法以通用的方式完成所有这些 - 避免每个字段的专门方法,但保留我想要的所有类型安全?如果是的话,该怎么做?
答案 0 :(得分:0)
老实说,如果你要这样做,你可能会想要以两种方式做到这一点:
1)创建一个新类。
如果你在公共类之间共享50个左右的字段,你也可以创建一个公共类或结构来保存数据。
2)使用std::map/std::unordered_map
。
对我而言,如果您真的想以牺牲性能为代价创建一个灵活的系统,您可以使用{{1}}来实现一个键/值系统。 Boost.Variant具有良好的实现,允许各种变体类型充当更高级的枚举。如果使用此键作为键,则可以确保映射仅具有枚举数量的类型,并且仍然保持类型安全。请注意这样做的问题。
答案 1 :(得分:0)
我不知道任何符合您所有要求的纯C ++解决方案。由于缺乏类型安全性,运行时强制转换不适合您,而在编译时没有办法(AFAIK)迭代枚举,而且为每个项目生成一个类成员。即使有一些超级复杂的基于模板的方法,在我看来,编写一些可以从你的枚举中生成C ++代码的脚本将更简单,更灵活地实现你想要的。