创建一个方法来迭代自定义类的任何容器和模板?

时间:2013-11-22 02:29:25

标签: c++ templates generics iterator

我有一个抽象类的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 ++的新手!

2 个答案:

答案 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;
}