是否可以在不专门化的情况下拥有一个向量?
我的问题是:我有一个抽象类 N4GestureRecognizer 和它的几个子类。因此,在 Controller 类中,我想要一个vector<N4GestureRecognizer> recognizers_
,但由于它是抽象的,所以我不能。如何将此识别器存储在向量或集合或列表中,或者在标准 C++ 中可循环的任何内容中?
将它们存储为指针。纯指针或一些智能指针类。
EXTRA 实际上,即使类不是抽象类而是子类,并且子类打算在向量中使用,指针也是唯一的方法。为什么:std::vector 为每个元素分配 sizeof(T) 字节,但 sizeof(derivedFromT) 可能大于 sizeof(T)。您将能够将子对象推送到向量中,但它可能会在运行时导致不可预知的问题。
当然,管理指针向量很痛苦,但据我所知,boost 包含一些智能指针来简化任务。
你需要的是一个std::vector< std::shared_ptr<N4GestureRecognizer> >
.
如果您的 std lib 没有std::shared_ptr
(它是下一个 C++ 标准的一部分,预计将于明年发布),它可能会附带std::tr1::shared_ptr
,这是相同的(作为官方技术报告 1对当前 C++ 标准的补充)。如果这也失败了,总会有boost,它有boost:shared_ptr
(它是std::tr1::shared_ptr
and的前身std::shared_ptr
)。
注意:不要使用裸指针 ( std::vector<N4GestureRecognizer*>
)。几乎没有办法让它安全,以免泄漏。