I'm trying to find a solution to the following problem. If I have an associative sequence such as a fusion::set and I make a filter view of it, the view is not a model of an associative sequence and does not support the has_key and at_key functions. I can use fusion::as_set on the view to get an associative sequence again, but this doesn't really have the effect I want as it results in a set holding copies of the original data whereas the view referenced the original data. Example below. Would it be possible to create a view which supported the associative sequence interface? Any suggested alternative approaches? Thanks Nate ~~~~~~~~~~~~~~~~~ #include <boost/fusion/include/set.hpp> #include <boost/fusion/include/intrinsic.hpp> #include <boost/fusion/include/filter_view.hpp> #include <string> #include <boost/type_traits/is_arithmetic.hpp> #include <boost/mpl/placeholders.hpp> namespace fusion = boost::fusion; using boost::mpl::_; int main() { typedef fusion::set<int,double,std::string> set_t; set_t s(1,2.0,"hello"); fusion::filter_view<set_t,boost::is_arithmetic<_>> filtered_view(s); fusion::front(filtered_view) = 4; //modifies s fusion::result_of::as_set<fusion::filter_view<set_t,boost::is_arithmetic<_>
::type filtered_set(filtered_view); fusion::at_key<int>(filtered_set) = 16; // modifies the copied data in filtered_set. }