我正在尝试覆盖矢量类并向其添加自定义函数,但是来自 Java,我并不真正熟悉覆盖、继承和此类东西的机制。
问问题
1773 次
1 回答
5
标准容器不是多态的,所以你不能覆盖它们的行为;并且没有受保护的成员,因此没有必要从它们继承来扩展它们。
虽然您可以这样做,但正如另一个答案所建议的那样,您必须重新实现所有构造函数(或者,自 2011 年以来,显式继承它们),因为它们不是继承的;并且当类不支持时,有人会以多态方式处理它,例如通过指向基类的指针进行删除。
相反,通过在公共接口上运行的非成员函数添加功能:
template <typename T>
void frobnicate(std::vector<T> & v) {for (auto & x : v) frobnicate(x);}
更一般地,遵循标准库的示例并编写一个在通用迭代器范围内操作的模板:
template <typename InputIterator>
void frobnicate(InputIterator begin, InputIterator end) {
while (begin != end) frobnicate(*begin++);
}
于 2013-10-19T10:38:40.677 回答