自动初始化和const正确性

时间:2015-11-07 20:33:09

标签: c++

我有一个自定义迭代器实现(它迭代db查询结果,但这与此无关)。它在概念上有两组函数:get类型函数,它返回当前项(当前行)的值,以及setup类型函数(在我的情况下为bind s),其中在开始迭代之前设置迭代器,因此新的迭代器实例实际上并没有指向第一个项目。还有一个reset函数可以使迭代器和readys无效,以便进行不同的设置。

当调用其中一个get函数时,它首先检查迭代器是否仍然是新的还是已经重置(有效地指向begin()-1),如果是,则将其推进到第一个项目。 get函数将(应该)为const,但有条件的第一次推进会阻止这种情况。

我应该:

  1. 声明他们const并为mutable输入isReset标志,或
  2. 保持原样,并接受以下事实:初始化对象使其成为非const
  3. 用检查初始化状态替换自我初始化,并在调用任何operator++函数之前将其留给用户调用get一次?

1 个答案:

答案 0 :(得分:2)

您的迭代器具有状态(即底层数据是否可用),“get”函数会改变该状态。所以这就像任何其他迭代器一样。 “get”函数不应该是const。顺便说一句,不是调用你的函数“get”,最好让迭代器与标准库迭代器具有相同的接口 - 然后你可以使用标准算法。因此,请使用运算符*()和运算符++()等函数。

相关问题