我目前处于类库的设计阶段,偶然发现了一个类似于“使用没有 RTTI 的中央管理器管理不同的类”或“避免 dynamic_cast 的模式”的问题。
想象有一个类层次结构,其中有一个基类Base和两个作为Base子类的DerivedA和DerivedB类。在我的库中的某个地方,将有一个类需要保存DerivedA和DerivedB类型的对象列表。进一步假设此类将需要根据类型对两种类型执行操作。显然我会在这里使用虚函数来实现这个行为。但是如果我需要管理类来给我DerivedA类型的所有对象呢?
这是一个糟糕的类设计的指标,因为我只需要对类层次结构的一个子集执行操作吗?
或者它只是意味着我的管理类不应该使用Base列表而是两个列表 - 一个用于DerivedA,一个用于DerivedB?因此,如果我需要对这两种类型执行操作,我将不得不遍历两个列表。在我的情况下,需要向层次结构添加新子类的可能性非常低,目前的数量约为 3 或 4 个子类。