Re: input formatted file
On Nov 26, 4:56 pm, "Jim Langston" <tazmas...@rocketmail.com> wrote:
"James Kanze" <james.ka...@gmail.com> wrote in message
[...]
It's interesting that you usually use both directions, however.
I've never had a case where I've needed a bi-directional
iostream, of any type. I can imagine them with fstream,
however, at least if you open the fstream in binary mode. I
can't even image a case where you would want one for a
stringstream, however. Are you using them as some sort of
temporary file? If so, why---what's the advantage compared to
simply saving the raw data in its internal format?
template<typename T, typename F > T StrmConvert( const F from )
{
std::stringstream temp;
temp << from;
T to = T();
temp >> to;
return to;
}
That's boost::lexical_cast. Which is probably what I'd use if I
ever needed it. I'll admit that I never saw the utility of
boost::lexical_cast either. And I'm rather sceptical of using
iostream inserters and extractors for this, too.
Consider something like:
std::complex< double > z( 1.0, 0.0 ) ;
double x = boost::lexical_cast< double >( z ) ;
The result should obviously be 1.0. Your code will return 0.0,
and boost::lexical_cast will raise some sort of exception.
IMHO, the example showcases both problems:
-- converting a type A to a type B makes no sense in
general---you have to define exactly what is meant, for each
case (What should std::complex< double >( 0.0, 1.0 )
return when converted to double?), and
-- whatever definition you use, the >> and << won't necessarily
do the trick.
(I wonder if this isn't some sort of larger anti-pattern:
providing a generic solution for a problem which doesn't have a
generic solution.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34