Я пытаюсь реализовать итератор map<T, shared_ptr<U>>
, который «удаляет» shared_ptr
, то есть разделяет на pair<T, U&>
. Мне нужно это, чтобы адаптировать мою обертку по map
к диапазону для цикла.косвенный_отражатель для карты <T, shared_ptr <U>>
boost::indirect_iterator
похоже на что-то, предназначенное для такой необходимости. Я попытался это:
typedef std::map<int, std::shared_ptr<int>> M;
typedef boost::indirect_iterator<M::iterator, std::pair<int, int>> It;
Это не работает из-за indirect_iterator
требования:
Выражение * v, где v является объектом iterator_traits :: value_type, должно быть действительным выражением и конвертируются в ссылки ,
Можно ли использовать boost::indirect_iterator
для выполнения этой задачи? Если нет, могу ли я сделать это с помощью boost::iterator_adaptor
?
'map | boost :: adapters :: map_values | boost :: adapters :: косвенные' – Xeo