
Victor A. Wagner Jr. wrote:
After reading (and re-reading a few times) the documentation on range, it appears to me that there is little (if any) difference between: boost::sub_range<T> and boost::iterator_range<T::iterator>
I've been working on a N way merge algorithm for work, and thought it might be a nice chance to learn bost::range and maybe even get it general enough to submit for boost utility some day. At any rate. Here's the problem: I've written a test case and two implementations (work still in progress) but I get compile errors when I try to use sub_range.
the code can be found at http://www.noidea128.org/sourcefiles/15646~
to change the program from compiling/running the iterator_range to sub_range simply change the lne from:
Nway_merge(contain, ourmerged); -to- SNway_merge(contain, ourmerged);
my compiler (VC-8_0) gives two errors which I cannot decipher. Any assistance would be appreciated.... especially if I've misunderstood why sub_range instead of iterator_range.
Hi, push_back adds constness to sub_range. See: #include <vector> #include <boost/range/sub_range.hpp> typedef std::vector<int> container; boost::iterator_range<container::iterator> iterng; boost::sub_range<container> subrng; void push_to_iterng(const boost::iterator_range<container::iterator>& rng) { iterng = rng; } void push_to_subrng(const boost::sub_range<container>& rng) { // error subrng = rng; } GCC can skip the work for constness if the target type is the same, so GCC compiles successfully. But I think it should be conceptually error. On the other hand, constness of iterator_range has no effect. Some situations add constness to range before one knows, so it is preferable to avoid using sub_range as value. sub_range is maybe for clients. For example, you can see Boost.StringAlgorithm. They return iterator_range, but you can catch it by using sub_range. Regards, MB http://p-stade.sourceforge.net/