不同类型的类成员,每个枚举变量一个

时间:2015-06-18 22:14:34

标签: c++ templates enums

我有一个这样的枚举:

enum Field {
    Foo,
    Bar,
    Baz,
    // 50 more follow
}

我想将一些数据类型与每个值(Foo - uint,Bar - string等)相关联,并且我想创建一个类,其中包含与此枚举关联的类型的每个枚举值的字段。我还希望有一个通用的getter / setter,它允许在一组字段上进行原子操作。

有没有办法以通用的方式完成所有这些 - 避免每个字段的专门方法,但保留我想要的所有类型安全?如果是的话,该怎么做?

2 个答案:

答案 0 :(得分:0)

老实说,如果你要这样做,你可能会想要以两种方式做到这一点:

1)创建一个新类。

如果你在公共类之间共享50个左右的字段,你也可以创建一个公共类或结构来保存数据。

2)使用std::map/std::unordered_map

对我而言,如果您真的想以牺牲性能为代价创建一个灵活的系统,您可以使用{{1}}来实现一个键/值系统。 Boost.Variant具有良好的实现,允许各种变体类型充当更高级的枚举。如果使用此键作为键,则可以确保映射仅具有枚举数量的类型,并且仍然保持类型安全。请注意这样做的问题。

答案 1 :(得分:0)

我不知道任何符合您所有要求的纯C ++解决方案。由于缺乏类型安全性,运行时强制转换不适合您,而在编译时没有办法(AFAIK)迭代枚举,而且为每个项目生成一个类成员。即使有一些超级复杂的基于模板的方法,在我看来,编写一些可以从你的枚举中生成C ++代码的脚本将更简单,更灵活地实现你想要的。