Итак, у меня есть умный итератор, который имитирует карту const_iterator, и ему необходимо внутренне построить возвращаемый тип.Очевидно, я хотел бы сохранить пару
в моем классе итератора (поскольку мне нужно его изменить), но в то же время я бы хотел, чтобы функции разыменования представляли пара
(на самом деле это была бы пара констант
и const pair
соответственно ). Единственное решение, которое я придумал до сих пор, - это динамически выделять новую пару каждый раз, когда меняет значение, на которое указывает мой класс итератора. Излишне говорить, что это не лучшее решение.
Я также пробовал * const_cast
, где значение
объявлено как пара
.
Любая помощь будет принята с благодарностью (равно как и осознание того, что это невозможно).
РЕДАКТИРОВАТЬ
Для любопытных: в итоге я сохранил пару
в своем классе итератора. Чтобы изменить пару, я изменяю два элемента отдельно на основе базового итератора ( map
), const_cast
с ключом, чтобы он мог быть измененным, например:
*const_cast<Key*>(&p.first) = it->first;
p.second = it->second;
Не то решение, которым я очень доволен, но оно выполняет свою работу, и методы разыменования удовлетворены, потому что я храню что-то правильного типа, на которое они могут ссылаться.