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 24 of 30 Topic 9533 of 9807
Post > Topic >>

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

by Niels Dekker - no return address <noreply@[EMAIL PROTECTED] > Apr 30, 2008 at 10:26 AM

Tony Guinness wrote:
> The operator<< that is called here...
>>    std::string s = (std::ostringstream() << "i = " << i).str();
> is member function std::ostream::operator<<(char const*).  There is no
> case of a tem****ary being bound to a non-const reference here.  It is
> perfectly legal and should compile just fine.

STL****t has it defined as a non-member!

   template <class _Traits>
   inline basic_ostream<char, _Traits>& _STLP_CALL
   operator<<(basic_ostream<char, _Traits>& __os, const char* __s)

Just look at "stl****t/stl/_ostream.h", from
http://www.stl****t.com/archive/STL****t-5.0RC2.tar.gz

> There is a well-known idiom for cir***venting this problem
> (without inventing your wrapper class) by using the knowledge
> that the member-function versions of operator<< all
> return lvalue references; one such member is the one that executes
> free functions whose signatures resemble
> "std::ostream& func(std::ostream&)" as if they were manipulators in
> the operator<< chain (e.g. std::endl, std::flush.) The idiomatic
> approach is to select std::flush for this job as it has no
> discernible side-effects; thus:
> 
>      int i = 42;
>      std::string prefix = "i = ";
>      std::ostringstream() << std::flush << prefix << i;

Nice trick! Actually I didn't know that idiom, but I'm certainly not an
STL expert...

>> 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();
> 
> As explained above, all this is unnecessary.

Well, I still like to use the Wrapper, because it's a more generic way
to get a "tem****ary" lvalue reference. It could also be used for types
that don't sup****t the "<< std::flush" idiom. Instead of using my
Wrapper template, you could of course use Boost's value_initialized:

   std::string s = (boost::value_initialized<std::ostringstream>().data()
     << "i = " << i).str();

Of course my approach still has to compete against the wonderful
StringBuilderFactory::StringBuilder solution by Vidar Hasfjord...

Anyway, thanks for your suggestion!

Kind regards, Niels

-- 
      [ 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 19 20:07:57 CDT 2008.