我有一个自定义迭代器实现(它遍历数据库查询结果,但这与本题无关)。从概念上讲,它具有两组函数:
当调用其中一个
我应该:
get
类型的函数,它们从当前项目(当前行)返回值,和setup
类型的函数(在我的情况下是bind
),它们在开始迭代之前设置迭代器,因此新的迭代器实例实际上还没有指向第一个项目。还有一个reset
函数,它将迭代器置空并准备以不同的方式进行设置。当调用其中一个
get
函数时,它首先检查迭代器是否仍然是新的或已被重置(有效地指向begin()-1
),如果是,则将其推进到第一个项目。get
函数应该是const
的,但是这个条件性的推进阻止了这一点。我应该:
- 声明它们为
const
并加入一个mutable
用于isReset标志,或者 - 保持原样,并接受在对象初始化时它变成了非
const
的事实,或者 - 用初始化状态检查替换自初始化,并让用户在调用任何
get
函数之前调用operator++
一次?
get...
调用的情况下是否可以等于end()
? - 6502