Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ Moderated > Re: How to buil...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 6 of 30 Topic 9533 of 9831
Post > Topic >>

Re: How to build a string on the fly, using std::ostringstream?

by Brendan <catphive@[EMAIL PROTECTED] > Apr 24, 2008 at 03:43 PM

On Apr 23, 12:14 pm, "Niels Dekker - no return address"
<nore...@[EMAIL PROTECTED]
> wrote:
> Does the Standard Library sup****t creating an std::string by means of
> streaming, without having to declare a *named* ostringstream object?  I
tried
> the following:
>
>    #include <sstream>
>    #include <string>
>    int i = 42;
>
>    std::string s = (std::ostringstream() << "i = " << i).str();
>
> Of course it didn't compile, because a tem****ary (std::ostringstream())
cannot
> be passed as non-const reference to a function (operator<<).  Okay,
second
> try, wrapping the ostringstream as follows:
>
>   template <typename T> class Wrapper {
>    T m_data;
>   public:
>    T & get() {
>     return m_data;
>    }
>   };
>
>   std::string s = (Wrapper<std::ostringstream>().get() << "i = " <<
i).str();
>
> Unfortunately it still didn't compile, because operator<< returns an
> std::basic_ostream, instead of an std::ostringstream, and therefore it
doesn't
> have an str() member function.  Now I wonder, is it safe to cast the
stream,
> returned by operator<< to an ostringstream reference?  As follows:
>
>   std::string s =
> static_cast<std::ostringstream&>(Wrapper<std::ostringstream>().get()
>      << "i = " << i).str();
>
> At least, it *seems* to work...   But is it the proper way to do it?

I actually like your workaround, although you should typedef
Wrapper<std::ostringstream> to make it cleaner. I believe that
tem****aries are guaranteed to stick around until the next statement,
so you are good. Oh! also, overload << something like this:

std::string operator<<(basic_ostream& stream, ToStr& tstr) {
  return static_cast<std::ostringstream&>(stream).str();
}

I haven't tested that, and obviously it isn't type safe, but since <<
is left associative you should be able to:

string x = temp_ostringstream().get() << "i = " << i << to_str;

where to_str is the single instance of ToStr.

Pretty nifty eh? There's probably some way to make getting the
tem****ary ostringstream easier, and maybe even making this statically
type safe, but it's late...

iostreams << are pretty lame for formatting syntactically speaking and
pretty much everybody ends up rolling their own formatting utility on
top of it.

Check out:

http://www.boost.org/doc/libs/1_35_0/libs/format/doc/format.html

which is basically a typesafe printf.

-- 
      [ See http://www.gotw.ca/resources/clcm.htm
for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]
 




 30 Posts in Topic:
How to build a string on the fly, using std::ostringstream?
"Niels Dekker - no r  2008-04-23 13:14:37 
Re: How to build a string on the fly, using std::ostringstream?
Martin York <Martin.Yo  2008-04-24 01:05:54 
Re: How to build a string on the fly, using std::ostringstream?
Peter Jones <dev-null@  2008-04-24 01:10:33 
Re: How to build a string on the fly, using std::ostringstream?
Carl Barron <cbarron41  2008-04-24 01:43:21 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-24 15:12:53 
Re: How to build a string on the fly, using std::ostringstream?
Brendan <catphive@[EMA  2008-04-24 15:43:20 
Re: How to build a string on the fly, using std::ostringstream?
Brendan <catphive@[EMA  2008-04-25 10:22:59 
Re: How to build a string on the fly, using std::ostringstream?
Niels Dekker - no return   2008-04-26 08:46:24 
Re: How to build a string on the fly, using std::ostringstream?
Carl Barron <cbarron41  2008-04-27 07:13:20 
Re: How to build a string on the fly, using std::ostringstream?
Brendan Miller <catphi  2008-04-27 07:29:25 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-27 07:29:42 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-28 01:56:19 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-28 02:13:22 
Re: How to build a string on the fly, using std::ostringstream?
vova777@[EMAIL PROTECTED]  2008-04-28 16:06:27 
Re: How to build a string on the fly, using std::ostringstream?
"Niels Dekker - no r  2008-04-28 16:01:35 
Re: How to build a string on the fly, using std::ostringstream?
guinness.tony@[EMAIL PROT  2008-04-28 16:01:50 
Re: How to build a string on the fly, using std::ostringstream?
"Hendrik Schober&quo  2008-04-28 20:35:47 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-29 10:38:48 
Re: How to build a string on the fly, using std::ostringstream?
Brendan Miller <catphi  2008-04-29 10:43:23 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-29 10:43:23 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-29 10:43:22 
Re: How to build a string on the fly, using std::ostringstream?
vova777@[EMAIL PROTECTED]  2008-04-29 12:13:56 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-29 17:41:45 
Re: How to build a string on the fly, using std::ostringstream?
Niels Dekker - no return   2008-04-30 10:26:51 
Re: How to build a string on the fly, using std::ostringstream?
vova777@[EMAIL PROTECTED]  2008-04-30 10:39:18 
Re: How to build a string on the fly, using std::ostringstream?
Vidar Hasfjord <vattil  2008-04-30 17:04:43 
Re: How to build a string on the fly, using std::ostringstream?
guinness.tony@[EMAIL PROT  2008-05-01 13:12:58 
Re: How to build a string on the fly, using std::ostringstream?
"Niels Dekker - no r  2008-05-02 12:45:30 
Re: How to build a string on the fly, using std::ostringstream?
guinness.tony@[EMAIL PROT  2008-05-07 11:43:29 
Re: How to build a string on the fly, using std::ostringstream?
"Niels Dekker - no r  2008-05-08 21:29:05 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat Jul 26 2:51:55 CDT 2008.