Boost logo

Boost :

Subject: [boost] [range] Extended... maybe?
From: Vladimir.Batov_at_[hidden]
Date: 2009-04-16 00:01:19

I am trying something looking fairly reasonable:

        string str1 = boost::replace_all_copy(str, 'x', '0');

It obviously fails to compile with:

        error: no matching function for call to 'begin(const char&)'
        error: no matching function for call to 'end(const char&)'

as replace_all_copy() wants boost::ranges for the 2nd and 3rd parameters:

                const SequenceT &,
                const Range1T &,
                const Range2T &);
and 'x' and '0' are not boost::ranges. Would that be sensible to extend
boost::range along the following lines to allow string_algo to work with
individual characters?

namespace boost
    struct range_iterator<char>
        typedef char* type;
    struct range_const_iterator<char>
        typedef char const* type;
    namespace range_detail
        template<> inline char const* boost_range_begin(char const& c)
            return &c;
        template<> inline char const* boost_range_end(char const& c)
            return &c + 1;


P.S. I do understand that the following works

        string str1 = boost::replace_all_copy(str, "x", "0");

Boost list run by bdawes at, gregod at, cpdaniel at, john at