What's the purpose of boost::to_string
(found in boost/exception/to_string.hpp
) and how does it differ from boost::lexical_cast<std::string>
and std::to_string
?
std::to_string
, available since C++11, works on fundamental numeric types specifically. It also has a std::to_wstring
variant.
It is designed to produce the same results that sprintf
would.
You may choose this form to avoid dependencies on external libraries/headers.
The throw-on-failure function boost::lexical_cast<std::string>
and its non-throwing equivalent boost::conversion::try_lexical_convert
work on any type that can be inserted into a std::ostream
, including types from other libraries or your own code.
Optimized specializations exist for common types, with the generic form resembling:
template< typename OutType, typename InType >
OutType lexical_cast( const InType & input )
{
// Insert parameter to an iostream
std::stringstream temp_stream;
temp_stream << input;
// Extract output type from the same iostream
OutType output;
temp_stream >> output;
return output;
}
You may choose this form to leverage greater flexibility of input types in generic functions, or to produce a std::string
from a type that you know isn't a fundamental numeric type.
boost::to_string
isn't directly documented, and seems to be for internal use primarily. Its functionality behaves like lexical_cast<std::string>
, not std::to_string
.