Является ли хорошей практикой сделать регулярный итератор (или аналогичный диапазон или класс представления) получить из соответствующего const_iterator?Должен ли регулярный итератор (или аналогичный класс/класс) получать из const_iterator?
мотивация для этого
- обмена код и
- избежать преобразования, когда итератор/вид большой.
В качестве примера, рассмотрим вид 3D сетки, т.е. участок сетки. Он может содержать 1 указатель, 3 размера и 2-3 шага, всего 384 байта.
Состоящие и мутирующие версии имели бы лот общей функциональности (все, что вы можете сделать с трехмерной сеткой только для чтения).
против мотивации для приведенного выше примера является то, что сопзИте представление содержит константный указатель, и поэтому вид Mutating бы сделать const_cast
использовать его, или добавить дополнительное поле, содержащее тот же адрес в неконтинентный указатель.
Нет, это делает const_iterator атератором (мутирующим) –
. Если что-то должно быть обратным отношением ..., любая операция, которую вы можете сделать с помощью 'const_iterator', является действительной операцией на' iterator', но не другой способ вокруг. Опять же, я бы не использовал наследование по умолчанию для итераторов, я могу * злоупотреблять * его, если сложность кода итератора делает его взломать, но я бы избегал этого [возможно, перевести реализацию в третий тип и поделиться кодом как в 'итераторе', так и' const_iterator' –
@ DavidRodríguez-dribeas Спасибо, я отменил отношения наследования в моем вопросе. Надеюсь, это не является нарушением SO-этикета. – MaxB