Я создаю тип, который моделирует InputIterator
, В моем приложении «пропустить первые сто тысяч элементов» разумно, и создание value_type
дорого, поэтому я хочу, чтобы мой итератор создал value_type
только когда разыменовывается, а не когда увеличивается.
Я мог легко сделать operator*
вернуть value_type
по значению. Но я не знаю, что делать с operator->
, Как я могу вернуть указатель, если мой итератор не хранит value_type
? Я боюсь проблем на всю жизнь с указателем на временную, и не хочу быть сожженным.
Я думал о том, чтобы не предоставлять operator->
, но тогда у меня не было бы полного InputIterator
,
Я считаю, что это будет работать, чтобы вернуть прокси-объект по значению от итератора operator->
, Прокси будет иметь единственный элемент данных value_type и свой собственный operator->
возвращая указатель на этот элемент данных.
Время жизни прокси-объекта такое же, как и у любого другого объекта, возвращаемого по значению (как мой план для operator*
), так что, хотя у меня есть указатель-временный, в этих обстоятельствах он используется до уничтожения прокси-объекта.
Других решений пока нет …