[fusion] [range] Interest in unified functions
Hi, I was playing with Boost.Fusion and wrote this simple function: template <class Sequence> std::string stringize(const Sequence& seq) { std::string result; boost::fusion::for_each(seq, stringize_functor(result)); return result; } Which allows to convert many types to strings: boost::fusion::vector<cat, int, std::string> tup1(cat(), 0, "_0"); boost::tuple<cat, int, std::string> tup2(cat(), 0, "_0"); std::pair<cat, cat> cats; std::cout << stringize(tup1) << '\n' << stringize(tup2) << '\n' << stringize(cats) << '\n' But this example fails to convert the following : std::vector<cat> too_many_cats(20); All we need to do to allow conversions, is just add the following: #include <boost/range/algorithm/for_each.hpp> namespace boost { namespace fusion { template <typename Sequence, typename F> inline typename disable_if< traits::is_sequence<Sequence> , void >::type for_each(Sequence const& seq, F const& f) { ::boost::range::for_each(seq, f); } }} So now std::cout << stringize(too_many_cats) << '\n'; works and boost::fusion::for_each may work with any type, runtime length or compile time. We may also make a lot of other algorithms to make no difference between runtime and compile time classes: accumulate, find, find_if, count, all, none, begin, end, advance, distance, dereference, empty and others... The questions are: Is there interest in such features? Is there interest in adopting other algorithms and which ones? To what library shall those methods belong? -- Best regards, Antony Polukhin
participants (1)
-
Antony Polukhin