我目前正在尝试构建自定义类的迭代器,但它不会特别好:我遇到的问题是我的自定义类使用模板,看起来像这样:自定义迭代器模板
现在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