
Hi, On 23 November 2011 17:55, Matthew Chambers <matt.chambers42@gmail.com> wrote:
On Oct 13, 2011 Michel Morin wrote:
lexical_cast made optimizations for some types (such as `std::string`) to achieve better performance. But, from my experience, it seems that lexical_cast does not make any optimization for `boost::iterator_range<std::string::iterator>`.
Is there any plan to add optimization for such iterator ranges? Currently, - `lexical_cast<int>(std::string(iter_rng.begin(), iter_rng.end()))` is faster than `lexical_cast<int>(iter_rng)`. - Assuming it is safe to use `std::atoi`, `std::atoi(&iter_rng.front())` is faster than both of the above two methods. (`iter_rng` is an instance of `boost::iterator_range<std::string::iterator>`.)
Regards, Michel
This post was on the boost users list but never got a reply. I figure it might be a better fit on the developer list. I too would like to see optimized conversions work on string ranges; what's the point in doing a fast conversion if you have to do a string copy first? :)
-Matt
You might be interested in boost.coerce, a type-to-string and string-to-type conversion library. The code can be found at http://svn.boost.org/svn/boost/sandbox/coerce/ and an initial version of the documentation at http://vexocide.org/coerce/. It has the following customization points: http://vexocide.org/coerce/coerce/traits/string/is_string.html and http://vexocide.org/coerce/coerce/traits/string/string_traits.html, which would allow you to teach it about boost::iterator_range<std::string::iterator>. If I find time I'll write a small example. Kind regards, Jeroen