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