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

Chr*_*s G 2 c++ generics templates iterator

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

我已经创建了一个方法来遍历一系列动物对象并在每个对象上调用“描述”方法。Describe 是一个纯虚函数,已在子类中实现。

我正在尝试创建一种方法来遍历任何动物容器并执行相同的操作。

这是我到目前为止所拥有的:

template <typename Container>
void describe_all(Container &c) {
typedef typename Container::iterator Iter;

for (Iter p = c.begin(); p != c.end(); ++p)


}
Run Code Online (Sandbox Code Playgroud)

我的脑子在这里一片空白,我不确定如何合并动物类。我对 C++ 还是很陌生!

Nil*_*Nil 6

你已经有了答案。只需键入呼叫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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果模板化类型不提供 describe 方法,它将不会编译。

当然,如果可以使用C++11,这段代码会更简洁。

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