我在过去的8年左右一直是Java程序员,最近我一直在玩C++。以下是我在C++ STL和Java中针对迭代器提出的问题。如何编写以通用方式接受迭代器或集合的函数?
在Java中,你可以编写需要这样一个迭代的方法:
void someMethod(Iterator<String> data) {
// ...
}
传入一个Iterator
和方法不需要知道什么是迭代器的底层集合是,这是好。
在C++中,没有用于迭代器的公共基类(据我所知)。我不得不写一个函数是这样的:
void some_function(std::vector<std::string>::const_iterator data) {
// ...
}
换句话说,some_function
知道迭代器是在vector
的迭代器。这并不好,因为我希望函数能够工作,而不管迭代器的底层集合是什么。
我该如何在C++中做到这一点?如果这不是真的可行,那么在C++中创建一个以集合为参数的函数的最佳方式是什么,但不需要知道确切种类的集合是什么?
附录
感谢您的答案。除了答案之外,我在The C++ Standard Library: A Tutorial and Reference(Nicolai M. Josuttis着)的第7.5段(迭代器特征)中找到了一些关于这方面的很好的信息。段落7.5.1解释了如何为不同的迭代器类别编写函数的专用版本。
谢谢,这看起来像一个很好的解决方案。 – Jesper 2009-09-19 08:57:50