模板自定义迭代器

Custom Iterator for Template

本文关键字:迭代器 自定义      更新时间:2023-10-16

我目前正在尝试构建一个自定义类的迭代器,它不是特别好:我遇到的问题是,我的自定义类使用模板,看起来像这样:

template<class T>
class MyClass {
private:
    T memberVar;
};

现在,MyClass基本上是memberVar的包装器,而memberVar目前是一个map或map的map。现在,我想在另一个类中创建一个迭代器,并使用它做一些有用的事情,即访问我的map或map的map中的元素。

我已经尝试从我的映射转发我的迭代器,当我做像typedef T::iterator iterator;这样的事情时,它不会给我在MyClass中出现错误,但当我想调用myIterator->first时,它显然不想对我好,因为现在它不再相信我,这将起作用。老实说,我很惊讶地看到我的typedef实际上是有效的。

现在我的问题是:有没有一个好的方法来做我想做的事?还是我把自己逼入了死角?非常感谢提前!

西蒙

更多信息:

在ClassA中,我实例化了一个ClassB,然后它以正确的类型T继承了MyClass。然后,在类a中,我也实例化了一个类c,我给它一个对类b的引用。现在,当我尝试在ClassC中创建myIterator并尝试执行myIterator->first时,错误发生了。

对于初学者来说,如果您的类模板总是作为包装器在map的一些实例化中,我会重复所有的typedefstd::map,每次使用:

typedef typename T::value_type;
// ...

(typename是必要的,至少根据标准,但是g++的版本,并使用它编译所有的代码,即使您使用不同的编译器用于最终版本。)

关于myIterator->first不工作,你必须告诉我知道这条线发生在哪里。如果是a的话,应该没有问题函数,因为函数不应该是直到它被使用(并且由该类型,T的类型是)已知)。如果它在类模板之外,它应该仍然可以工作;如果您已经正确地声明了变量,例如:

MyClass<std::map<T1, T2> >::iterator myIterator;

(在类模板中,只需使用iterator作为类型名即可足够了,因为typedef在范围内)