Boost logo

Boost Users :

From: François Duranleau (duranlef_at_[hidden])
Date: 2006-03-15 20:29:04


On Wed, 15 Mar 2006, Delfin Rojas wrote:

> The problem with your example was that after you read the first double there
> was a blank space in the input so you could not read the second double.
> Something like this will do:
>
> istream& operator >> ( istream& in , vec& v ) {
> for ( int i = 0 ; i < vec::size ; ++ i )
> if ((in >> v.data[ i ]) && !in.eof())
> in.get();
> return in ;
> }

As far as I know, when using operator>> on numbers (or any types supported
by the standard library), preceding spaces are skept, unless explicitly
told not to. Mm, after peeking a little more deeply in
<boost/lexical_cast.hpp>, I noticed that they do deactivate white space
skipping... Argh, my damn old habits... Well, I'll have to use ">> ws"
everywhere in operator>>'s now, or temporarily reenable it.

> I ran into another little problem while debugging your example so I thought
> I would mention it. Although the documentation does not explicitly say so
> you kind of make sense that lexical_cast expects the destination object's
> operator>> to use the complete output produced by the source object's
> operator<<. In other words:
>
> stream << source
> stream >> target
> !!! stream.eof() must be true at this point
>
> So if you try (like I did) lexical_cast<vec>("1 2 3") with vec.size = 2 it
> will fail.

I know that.

Thanks for your help!

-- 
François Duranleau
LIGUM, Université de Montréal
"The real source of wealth is correct ideas: workable ideas: that is,
  negative entropy -- Information."
                           - Robert Anton Wilson, _Prometheus Rising_, 1983

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net