有是您需要對此代碼進行兩項重大更改才能使其在Java中工作。首先,你需要用Java風格的迭代器替換STL風格的迭代器,幸運的是,這並不難。其次,由於Java不支持函數指針,因此必須更改函數指針或函子參數與不同類型對象的使用。
在Java中,迭代器比C++更重,它封裝了它們遍歷的全部範圍,而不僅僅是該範圍的開始或結束。使用Java迭代器,可以使用.next()和.hasNext()方法遍歷範圍。
至於函數參數,您可能需要創建自己的接口來表示某個可以作爲函數調用的對象。例如:
public interface Operation<T> {
void apply(T argument);
}
這個接口是在某些類型T說參數類型是什麼一個通用的參數,然後導出一個叫做apply()函數適用的功能。
鑑於此,一個簡單而樸素的方式來複制的for_each是寫
public static <T> forEach(Iterator<T> itr, Operation<T> op) {
while (itr.hasNext())
op.apply(itr.next());
}
我之所以說這是幼稚的是,它並沒有正確地使用通配符有限,擴大地方範圍它可以使用。更合適的版本,更Java友好的將是這樣:
public static <T> forEach(Iterator<T> itr, Operation<? super T> op) {
while (itr.hasNext())
op.apply(itr.next());
}
諮詢爲什麼這個工程上的Java遺傳學的參考。
希望這會有所幫助!
你有一本Java書嗎? C++不是Java,你不應該嘗試通過* C++學習Java *,你應該從頭開始學習它。(沒有什麼說明必須有等價;即使有,這可能不是Java中最好的方法。) – GManNickG 2011-03-18 19:20:42
@GMan:是的,我只是試圖應用這個概念,如果我不能申請它。我只會做出多種功能。這只是我知道用C++的東西,我想就在java中使用它,如果可用 – 2011-03-18 19:22:37
在這種情況下,你可能想仿製藥。 – 2011-03-18 19:33:14