我在過去的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