【发布时间】:2015-06-18 22:14:33
【问题描述】:
我有一个这样的枚举:
enum Field {
Foo,
Bar,
Baz,
// 50 more follow
}
我想将某些数据类型与每个值(Foo - uint、Bar - 字符串等)相关联,并且我想为每个枚举值创建一个类,该类具有与此枚举关联的类型。我还想要一个通用的 getter/setter,它允许对一组字段进行原子操作。
有没有办法以通用方式完成所有这些工作 - 避免每个字段的专用方法,但保留我想要的所有类型安全?如果有,该怎么做?
【问题讨论】:
-
“有没有办法以通用的方式完成所有这些工作” 是的。我们的生产代码中有这样的东西。
-
举个例子来说明你想要完成的事情以及一个用例。
-
我能告诉你这么多,代码是基于使用类似
std::map<Field,AbstractValueTypeWrapper>的东西。 -
@πάνταῥεῖ:是的,我应该知道这里的人会从字面上理解这个问题,给出一个二进制答案,没有任何解释如何实际做到这一点......现在要编辑。
-
@πάνταῥεῖ(第二篇文章):我不能使用 AbstractValueTypeWrapper,因为它需要类层次结构中的共同祖先 + RTTI 进行向下转换(两者都不是可能),或者完全不安全的转换问题,因为这会导致比它解决的问题更多的问题。