我有一個自定義的迭代器實現(它遍歷數據庫查詢結果,但這是無關的)。它在概念上具有2組功能:get
類型函數(返回當前項目(當前行)的值)和setup
類型函數(在本例中爲bind
s),它在開始迭代之前設置迭代器,因此a新的迭代器實例實際上並未指向第一個項目。還有一個reset
函數可以使迭代器和readys的設置不同。自動初始化和const正確性
當調用其中一個get
函數時,它首先檢查迭代器是否仍然是新的或已被重置(有效地指向begin()-1
),如果是,則將其推進到第一個項目。 get
功能將(應)爲const
,除了有條件的第一次提前防止這種情況。
我應該:
- 聲明它們
const
並在mutable
拋出的isReset標誌,或 - 保留原樣,並接受在引擎蓋初始化對象使其成爲事實非
const
或 - 將自我初始化替換爲初始化狀態的檢查,並留給用戶在調用任何
get
函數之前調用operator++
一次?
沒有'get ...'被調用的新迭代器可以等於'end()'? – 6502