c++ - 创建一个方法来使用模板迭代自定义类的任何容器?

标签 c++ templates generics 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)


}

我的脑子一片空白,我不确定如何合并动物类。我对 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();
    }
}

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

当然,如果你能使用C++11,这段代码会更干净。

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

关于c++ - 创建一个方法来使用模板迭代自定义类的任何容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135888/

相关文章:

c++ - 在运行程序之前加载/注册 DLL

c++ - 重载 vector<T> 的输出流运算符

c++ - 是否可以创建一个模板,该模板在专门化时会产生另一个模板?

generics - F# 中的严格泛型枚举转换

c# - 通过C++或C#和Windows API创建Wi Fi网络

c++ - boost::optional 的比较 (<)、输出 (<<) 和赋值 (=)

c++ - 无法创建模板 vector 迭代器

c# - 在父子关系中使用泛型

c# - 如何将变量定义为类型列表<<>f_AnonymousType1<string,string>>

c++ - 'for' 的增量表达式没有任何效果