2013/12/12 Steven Watanabe
<...>
Personally, I'm a bit unhappy
about this trend of creating parallel API's
that throw or report an error in some other way.
I had exactly the same opinion two years ago. Original developer of
lexical_cast had the same opinion.
But now I have code like this one:
// Function that maps to some query language method
inline boost::variant to_double(std::string const& val) {
double ret;
std::istringstream ss(val);
ss >> ret;
if (ss.fail() || !ss.eof())
return error_t("'to_double' function called for value '" + val +
"'");
return ret;
}
A lot of people, including me, would prefer to have the following:
inline boost::variant to_double(std::string const& val) {
double ret;
if (!try_lexical_cast(val, ret))
return error_t("'to_double' function called for value '" + val +
"'");
return ret;
}
Such method would also allow to use lexical_cast library for non default
constructible types.
While I sill dislike the idea of having additional overload. That's why
I've asked for comments.
--
Best regards,
Antony Polukhin