I have a library which allows you to do all kind of conversions like
to_string<string>(1234);
to_string<wstring>(1234, &hex);
to_string >(10.25, make_tuple(&fixed, setprecision(1), setw
(10)));
to_string<string>(1234, locale::classic());
to_string_classic<wstring>(1234); // same as above but with non-stream
specializations for int (planning to add double)
from_string<int>(str);
from_string<double>(str, -5); // return -5 on error
from_string<double>(str, &hex);
from_string<int>(str, &noskipws, std::locale("German"), 0);
from_string_classic<int>(str);
If you have many conversions you can increase preformance by reusing the
stream.
basic_tofrom_string<string> conv(make_tuple(setprecision(2), &fixed),
locale::classic());
conv.to_string(1234, &hex);
conv.to_char(1.234, setw(10)); // avoid copying result to std::string
conv.from_string<double>(str, 0.0);
All conversion routines uses a home-made streambuffer with optimizations to
avoid copying and memory allocations (e.g. small string optimization & buffer
reuse).
Main benefit over lexical_cast is that you can control formatting & locale but
performance is also much better due to less memory alllocations.