我目前正在嘗試構建自定義類的迭代器,但它不會特別好:我遇到的問題是我的自定義類使用模板,看起來像這樣:自定義迭代器模板
現在template<class T>
class MyClass {
private:
T memberVar;
};
,MyClass的基本上是memberVar的包裝這在目前是一個地圖或一個地圖。現在,我想在另一個類中創建一個迭代器,並對它做有用的事情,即訪問我的地圖或地圖地圖中的元素。
我已經試過我的地圖上,不給我一個MyClass的錯誤時,我這樣做typedef T::iterator iterator;
轉發我的迭代器,但它顯然並不想對我好時,我想打電話給myIterator->first
,因爲現在它不相信我會這麼做。說實話,我很驚訝地發現我的typedef確實有效。
現在我的問題:是否有一個很好的辦法做到我想做的是什麼?還是我在這裏把自己調到了一個角落?首先十分感謝!
西蒙
一些詳細信息:
在我的ClassA實例化一個ClassB的,然後用正確的類型T. 繼承MyClass的。然後,在我的ClassA也實例化一個ClassC我給一個參考ClassB的。現在,錯誤發生,當我嘗試在ClassC中創建myIterator
並嘗試執行myIterator->first
時。
你不需要'的typedef typename的T ::迭代器iterator'?我很驚訝,你說你沒有得到'typedef T :: iterator iterator'的錯誤。 – atkins 2011-12-22 17:08:25
這看起來更好,你是對的,但我沒有得到一個錯誤。如果有人能解釋這是爲什麼會很好。 另外:現在,我已經決定簡單地使用'地圖',從此我可以訪問的元素,並在那一刻,我只有地圖。這是,我覺得,雖然相當醜陋,我會很感激任何更好的解決方案:) –
simonstuck
2011-12-22 17:25:01
他應該得到一個錯誤,沒有'typename',但不是所有的編譯器強制執行此。 – 2011-12-22 17:27:13