不同类型的类成员,每个枚举变体一个
Class members of different types, one for each enum variand
我有一个这样的枚举:
enum Field {
Foo,
Bar,
Baz,
// 50 more follow
}
我想将一些数据类型与每个值(Foo - uint、Bar - 字符串等)相关联,并且我想为每个枚举值创建一个带有字段的类,该值的类型与此枚举相关联。我还想有一个通用的 getter/setter,它允许对字段组进行原子操作。
有没有办法以通用的方式完成所有这些工作 - 避免每个字段的专用方法,但保留我想要的所有类型安全性?如果是这样,该怎么做?
老实说,如果你要这样做,你可能希望通过两种方式做到这一点:
1) 创建一个新类。
如果要在公共类之间共享 50 个左右的字段,则不妨创建一个公共类或结构来保存数据。
2) 使用std::map<variant/enum, value>
。
对我来说,如果你真的想以牺牲性能为代价创建一个灵活的系统,你可以使用 std::map/std::unordered_map
来实现一个键/值系统。Boost.Variant 有一个很好的实现,允许各种变体类型充当更高级的枚举。如果将其用作键,则可以确定映射将仅具有枚举数量的类型,并且仍然保持类型安全。只是要注意这样做的问题。
我不知道
有任何纯粹的C++解决方案可以满足您的所有要求。由于缺乏类型安全性,运行时强制转换不适合您,而 (AFAIK) 无法在编译时迭代枚举,此外,为每个项目生成一个类成员。即使有一些超级复杂的基于模板的方法,在我看来,编写一些可以从枚举生成C++代码的脚本将更加简单和灵活,以实现您想要的。
相关文章:
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 我正在尝试创建一个枚举,但得到了"identifier expected error"
- C++如何将字符串数组中的一个点设置为枚举变量
- C++中一个非常简单的枚举类错误
- 如何编写一个错误结构,该结构可以包含不同的强键枚举作为错误代码
- 如何在交换机中将一个枚举值标记为不适当的大小写
- 从另一个C++文件中C++ "Importing"枚举类
- 如何声明另一个类中的枚举
- C/C :提取一个枚举的子集以形成新的枚举
- 随机生成一个没有重复元素的枚举数组 (C++)
- 有没有办法在一个枚举条目中存储多个值
- 为什么我的程序中的一个枚举具有奇怪的价值131075?
- 将一个枚举映射到另一个枚举
- 在Selene中包装一个枚举,以便在Lua中访问
- 为什么我不能将一个枚举作为另一个枚举的基础类型?
- 初始化一个枚举,比如它是一个类,以避免强制类型转换
- 我怎么能有一个枚举自定义类
- Typedef是C++中的一个枚举值
- C++ DirectX11 返回一个枚举类