【发布时间】:2021-11-15 00:53:59
【问题描述】:
我有一个带有枚举类成员变量的类,它旨在用作实例化对象的描述,永远不会有两个相同类型的实例化对象,例如:
class A
{
enum class Type { Type1, Type2, ...} type;
}
我想将所有实例化的对象存储在一个集合中,以便根据类型轻松访问,所以我认为映射是合适的:
class B
{
std::map<A::Type, A> components;
}
但是,有些事情告诉我这不是很好的设计,因为我实际上是在复制相同的数据,即使用类 (A) 成员变量 (type) 作为指向值的键 ( A) 类的对象,它也包含相同的信息。另一种选择是不将枚举用作 class A 成员变量,而是在 class B 中定义该枚举并仅将其用作键。 有什么建议吗?
【问题讨论】:
-
std::set<A, CustomComparerOnType>? (如果实例是不可变的)。 -
没有错。更多的是关于你有什么用例。
-
建议:不要过多地思考什么才是伟大的设计。设计服务于某些目的,如果您需要两次存储密钥,那么它有什么问题呢?您可以考虑使用
std::vector<A>作为替代方案,但您会错过map的所有便利 -
@appleapple 它可以有效地存储代表成本(数量、数量等)的组件(A 类)的集合,因此 B 类将用于有效地执行诸如汇总所有组件的成本之类的操作,但我仍然需要一种方法来访问单个组件的成本,因此映射将是理想的,而不是将对象存储在 std::vector 中并使用 if 语句遍历它以获取实际的组件类型。
-
@463035818_is_not_a_number 感谢您的建议-我肯定会想太多-正如我在对apple apple的评论中提到的那样,我想要该地图,因为我希望轻松访问集合中的各个对象,但是否则我会使用向量。
标签: c++ oop architecture