1

是否可以在不专门化的情况下拥有一个向量?

我的问题是:我有一个抽象类 N4GestureRecognizer 和它的几个子类。因此,在 Controller 类中,我想要一个vector<N4GestureRecognizer> recognizers_,但由于它是抽象的,所以我不能。如何将此识别器存储在向量或集合或列表中,或者在标准 C++ 中可循环的任何内容中?

4

2 回答 2

5

将它们存储为指针。纯指针或一些智能指针类。

EXTRA 实际上,即使类不是抽象类而是子类,并且子类打算在向量中使用,指针也是唯一的方法。为什么:std::vector 为每个元素分配 sizeof(T) 字节,但 sizeof(derivedFromT) 可能大于 sizeof(T)。您将能够将子对象推送到向量中,但它可能会在运行时导致不可预知的问题。

当然,管理指针向量很痛苦,但据我所知,boost 包含一些智能指针来简化任务。

于 2010-09-05T11:22:28.590 回答
1

你需要的是一个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_ptrand的前身std::shared_ptr)。

注意:不要使用裸指针 ( std::vector<N4GestureRecognizer*>)。几乎没有办法让它安全,以免泄漏。

于 2010-09-05T11:41:55.143 回答