我有一个抽象类的Animal,其中我创建了像Dog,Cat,Hamster等子类。
我已经制作了一个迭代动物对象列表的方法,并在每个方法上调用'describe'方法。 Describe是一个纯虚函数,已在子类中实现。
我正在尝试创建一个迭代任何动物容器并执行相同操作的方法。
这是我到目前为止所拥有的:
template <typename Container>
void describe_all(Container &c) {
typedef typename Container::iterator Iter;
for (Iter p = c.begin(); p != c.end(); ++p)
}
我的思绪在这里空白,我不确定如何加入动物类。我还是C ++的新手!
答案 0 :(得分:4)
你已经有了答案。只需输入describe()
template <typename Container>
void describe_all(const Container &c) {
typedef typename Container::iterator Iter;
for (Iter p = c.begin(); p != c.end(); ++p)
(*p)->describe();
}
}
如果模板化类型不提供describe方法,则无法编译。
当然,如果你可以使用C ++ 11,那么这段代码会更清晰。
template <typename Container>
void describe_all(const Container &c) {
for (auto ptr; c)
ptr->describe();
}
}
答案 1 :(得分:2)
您可能对stl。
中的for_each()
感兴趣
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function f) {
for( ; first != last; ++first)
f(*first);
return f;
}