我有以下课程
class Parent {
virtual void doStuff() = 0;
};
class Child : public Parent {
void doStuff() {
// Some computation here
}
};
我有一个具有以下签名的功能。
void computeStuff(std::vector<boost::shared_ptr<Parent> >);
如果我可以重构我的代码(包括函数签名),将函数computeStuff
传递给Child
对象的指针列表的最佳方法是什么? < / p>
基本上,我想要以下代码片段来编译和运行
std::vector<boost::shared_ptr<Child> > listOfChilds = getList();
computeStuff(listOfChilds);
答案 0 :(得分:5)
“最佳”方法是让函数使用一对迭代器:
template <typename ForwardIterator>
void computeStuff(ForwardIterator first, ForwardIterator last) {
/* ... */
}
您可以将此功能称为:
std::vector<boost::shared_ptr<Child> > listOfChilds = getList();
computeStuff(listOfChilds.begin(), listOfChilds.end());
使用一对迭代器而不是容器有很多优点,但这里的两个大的是
computeStuff
函数可以从任何类型的容器中获取范围,而不仅仅是std::vector
和
范围只需包含可转换为您要使用的类型的对象(例如boost::shared_ptr<Parent>
),它实际上不必包含该特定类型的对象。