我有一个自定义迭代器实现(它迭代db查询结果,但这与此无关)。它在概念上有两组函数:get
类型函数,它返回当前项(当前行)的值,以及setup
类型函数(在我的情况下为bind
s),其中在开始迭代之前设置迭代器,因此新的迭代器实例实际上并没有指向第一个项目。还有一个reset
函数可以使迭代器和readys无效,以便进行不同的设置。
当调用其中一个get
函数时,它首先检查迭代器是否仍然是新的还是已经重置(有效地指向begin()-1
),如果是,则将其推进到第一个项目。 get
函数将(应该)为const
,但有条件的第一次推进会阻止这种情况。
我应该:
const
并为mutable
输入isReset标志,或const
或operator++
函数之前将其留给用户调用get
一次?答案 0 :(得分:2)
您的迭代器具有状态(即底层数据是否可用),“get”函数会改变该状态。所以这就像任何其他迭代器一样。 “get”函数不应该是const。顺便说一句,不是调用你的函数“get”,最好让迭代器与标准库迭代器具有相同的接口 - 然后你可以使用标准算法。因此,请使用运算符*()和运算符++()等函数。