#pragma once #include namespace blink { // Template argument Map must be a lvalue_property_map. // Map should map a key to a struct or class 'bundle' // Template argument Type must be a member of Map::value_type template struct member_property_map : boost::put_get_helper > { BOOST_CONCEPT_ASSERT((boost::LvaluePropertyMapConcept::key_type>)); private: typedef typename boost::property_traits::value_type bundle_type; public: typedef typename boost::property_traits::key_type key_type; typedef typename Type value_type; typedef Type& reference; typedef boost::lvalue_property_map_tag category; member_property_map() {} member_property_map(Map map, Type bundle_type::* member) : m_map(map), m_member(member) {} reference operator[](const key_type& k) const { return m_map[k].*m_member; } private: Map m_map; Type bundle_type::* m_member; }; };