创建一个方法来迭代具有模板的自定义类的任何容器
Creating a method to iterate over any container of a custom class with templates?
我有一个抽象的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;
}
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 为自定义打印调试实现传递任何类型的变量
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 是否有任何可能的方法将事件(自定义)附加到在运行时创建的对象?[C 构建器]
- 自定义 OpenGL 缓冲区类不显示任何内容
- 创建一个方法来迭代具有模板的自定义类的任何容器
- xcode中的c++:在main中调用自定义对象中的任何(!!!!)方法时出错
- 自定义流操纵器,用于在任何基中流式传输整数
- 通过引用传递自定义类型-任何性能优势