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

Creating a method to iterate over any container of a custom class with templates?

本文关键字:自定义 任何容 迭代 一个 方法 创建      更新时间:2023-10-16

我有一个抽象的Animal类,其中我创建了Dog、Cat、Hamster等子类。

我制作了一个方法,它迭代动物对象的列表,并在每个对象上调用"description"方法。描述是一个纯虚拟函数,已经在子类中实现。

我正在尝试创建一个方法,该方法在任何动物容器上迭代并执行相同的操作。

到目前为止,我拥有的是:

template <typename Container>
void describe_all(Container &c) {
typedef typename Container::iterator Iter;
for (Iter p = c.begin(); p != c.end(); ++p)

}

我脑子里一片空白,不确定如何将动物类纳入其中。我对C++还很陌生!

您已经有了答案。只需向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();
    }
}

如果模板化类型不提供描述方法,它就不会编译。

当然,如果您可以使用C++11,那么这段代码会更干净。

template <typename Container>
void describe_all(const Container &c) {
    for (auto ptr; c)
        ptr->describe();
    }
}

您可能对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;
}