
Reece Dunn <msclrhd <at> hotmail.com> writes:
What about converting to different string types, mainly std::string or std::wstring?
I use to_string and to_wstring but both actually comes from basic_to_string which is templated on StringT. In my own stream class I have implemented c_str() so basic_to_string looks something like: template <typename StringT, typename T> StringT basic_to_string(call_traits<T>::arg_type x) { myostream<StringT::char_type> os; os << x; return StringT(os.c_str()); } template <typename T> std::string to_string(const T& x) { return basic_to_string<std::string, T> (x); } template <typename CharT> bool istream_failed(myistream<CharT>& is) { if (is.fail()) return true; if (is.eof()) return false; if ((is.flags() & std::ios_base::skipws) == 0) return true; is >> std::ws; // remove trailing whitespace return !is.eof(); // ok if eof } template <typename T, typename SequenceT> T from_string(const SequenceT& seq) { T v; myistream<SequenceT::value_type> is(begin(seq), end(seq)); is >> v; if (istream_failed(is)) throw invalid_argument("from_string"); return v; }
I am also working on implementing to_string and string_to :). Maybe we could
combine our efforts and get
to_string/string_to into Boost.
Sure. I can send you my code.
At the moment, my versions don't have locale support and string_to isn't
returning optional<T> I no fan of optional and prefer throw/default. I have not seen a situation where optional would be easier to use but many where it would be more difficult. locale support is a must for me since I want to use to_string both for user messages (which uses global locale) and SQL statements (which uses classic + a special date facet).