Раньше при замене типа контейнера с листа, например, на map – приходилось менять весь клиентский код, так как менялась семантика использования итераторов (вместо просто значения - пара ключ-значение).
В C++11 можно сделать вот так:
Ссылка на тему: http://stackoverflow.com/questions/21408251/how-to-declare-boost-range-adaptor-e-g-map-values
В C++11 можно сделать вот так:
auto list() const -> decltype( my_map | boost::adaptors::map_values ) { return my_map | boost::adaptors::map_values; }И отдать "наверх" тип, который позволяет итерировать только по значениям этого map (я понимаю что рубисты/дотнетчики на этом месте покрутят у виска, у них эти возможности давно уже есть, но для С++ это типа big deal).
Ссылка на тему: http://stackoverflow.com/questions/21408251/how-to-declare-boost-range-adaptor-e-g-map-values