I/O Formatting With Stringstream

The sprintf() function isn’t type-safe, it doesn’t support user-defined types and it’s a common source of buffer overflow bugs. In C++, there’s a better alternative to sprintf(), namely stringstream objects. The following function template accepts a value of any type and writes it into a user-supplied string s:

 #include using namespace std;template void string_fmt(string & s, const T & t){  ostringstream oss; // create a stream  oss << t; // insert t to buffer  s=oss.str(); // copy stream's string }


In the following example, the value 10.76 is written into the string s using the string_fmt() function template:

 string s;string_fmt(s,10.76);


The following cast_stream function template performs the opposite operation. It converts a variable of type in_value to a variable of type out_type. In the following example, cast_stream converts a string to a double:

 template out_type cast_stream(const in_value & t){ std::stringstream ss; ss << t; // first insert value out_type ret; // value will be converted to out_type ss >> ret; // write value to ret return ret;}string s=

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: