У меня есть класс под названием Action
, который по существу является оберткой вокруг объекта Move
.
Поскольку мне нужно пересечь deque Moves
как вперед, так и назад, у меня есть форвардный итератор и reverse_iterator в качестве переменных-членов класса. Причина этого заключается в том, что мне нужно знать, когда я прошел мимо "конца" дека, и когда я иду вперед или назад.
Класс выглядит следующим образом:
class Action
{
public:
SetMoves(std::deque<Move> & dmoves) { _moves = dmoves; }
void Advance();
bool Finished()
{
if( bForward )
return (currentfwd==_moves.end());
else
return (currentbck==_moves.rend());
}
private:
std::deque<Move> _moves;
std::deque<Move>::const_iterator currentfwd;
std::deque<Move>::const_reverse_iterator currentbck;
bool bForward;
};
Функция Advance
выглядит следующим образом:
void Action::Advance
{
if( bForward)
currentfwd++;
else
currentbck++;
}
Моя проблема заключается в том, что я хочу получить итератор для текущего объекта Move
, без необходимости спрашивать, иду я вперед или назад. Это означает, что одна функция возвращает один тип итератора, но у меня есть два типа.
Должен ли я забыть вернуть итератор и вместо этого вернуть ссылку const вместо объекта Move
?
наилучшие пожелания,
BeeBand