我有一个这样的枚举:
enum Field {
Foo,
Bar,
Baz,
// 50 more follow
}我希望将某些数据类型与每个值(Foo - uint、Bar - string等)相关联,并希望为与此枚举关联的类型的每个枚举值创建一个带有字段的类。我还希望有一个通用的getter/setter,它允许对一组字段进行原子操作。
有没有一种方法可以做到这一切,以一种通用的方式--避免为每个字段使用专门的方法,但保留我想要的所有类型安全?如果是,该怎么做呢?
发布于 2015-06-19 06:47:40
老实说,如果你要这样做,你可能会想要用两种方式来做:
1)新建一个类。
如果您要在公共类之间共享50个左右的字段,那么您不妨创建一个公共类或结构来保存数据。
2)使用std::map<variant/enum, value>。
对我来说,如果您真的想以牺牲性能为代价来创建一个灵活的系统,那么您可以使用std::map/std::unordered_map实现一个键/值系统。Boost.Variant有一个很好的实现,允许各种变体类型充当更高级的枚举。如果您使用它作为键,则可以确保映射将只具有枚举数量的类型,并且仍然保持类型安全。只需注意这样做会带来的问题。
发布于 2015-06-19 07:24:23
我不知道有任何纯C++解决方案可以满足您的所有需求。由于缺乏类型安全性,运行时强制转换不适合您,同时也没有办法(AFAIK)在编译时迭代枚举,并且为每个项生成一个类成员。即使有一些非常复杂的基于模板的方法,在我看来,编写一些可以从枚举中生成C++代码的脚本将会更简单、更灵活地实现您想要的。
https://stackoverflow.com/questions/30926727
复制相似问题