【发布时间】:2016-08-27 18:41:43
【问题描述】:
我需要在一个向量中存储恰好两种类型的对象,这两种类型几乎没有共同点。
将它们存储在向量中后,我想遍历该向量并执行操作,具体取决于类型。
到目前为止我的想法:
-
多态性。矫枉过正,对我没有多大帮助,因为我可能会这样做:
if(dynamic_cast<T1>() != nullptr) { ... } else { ... } 合并两种类型(方法和字段)并添加一个布尔值,表示其类型是 1 还是 2。
这两种模式对我来说似乎都很笨拙,可能有一个完全简单的解决方案,我根本看不到。
第一种是这样的:
struct PatternMatch {
int length;
int indexInDict;
}
第二个 一:
struct NoMatch {
std::string rawChars;
}
【问题讨论】:
-
为什么不创建一个有 2 个成员变量的
class。一个是PatternMatch,第二个是NoMatch。然后创建一个包含该类对象的向量? -
如果你使用继承和虚函数,那么你不需要做任何
dynamic_cast。事实上,这就是多态性的全部意义(而dynamic_cast代表完全相反的方法)。 -
为什么没有两个向量?
-
我认为我们需要更多地了解您将如何处理这两种类型,以便希望找到一个优雅的解决方案。
标签: c++ design-patterns vector polymorphism