我正在为迭代器编写一个包装器,并尝试使其行为与包含的迭代器一样。
为此,它需要重载operator *和operator ++,但这会产生以下问题:
//Typedefs to make below code easier to read
typedef std::map::const_iterator<std::string, SomeClass> iteratorAlias;
typedef std::pair<const std::string, SomeClass> mapPairAlias;
class IteratorWrapper
{
iteratorAlias iterator;
/*Other code omitted*/
mapPairAlias& operator*()
{
return *iterator;
}
const mapPairAlias& operator*() const
{
return *iterator;
}
IteratorWrapper& operator++()
{
++this->iterator;
return *this;
}
IteratorWrapper operator++(int)
{
IteratorWrapper copy(*this);
++(*this);
return copy;
}
};
在两个operator ++函数中,this
都需要取消引用。但看起来这会导致从重载函数中获取mapPairAlias
,而不是IteratorWrapper
。
如何解决此问题? STL迭代器处理这两个函数都很好,所以可能有一种方法。
答案 0 :(得分:4)
this
是指向当前实例的原始指针
*this
是对当前实例的引用
**this
是this->operator*()
所以你描述的问题不存在,*this
会做你想要的事情。