Kevin Goodsell wrote:[color=blue]
> Thomas Matthews wrote:
>[color=green]
>> Hi,
>>
>> In some threads, some people mentioned that variable initialization is
>> best performed in an initialization list.
>>
>> Is there a way to initialize a variable from an istream in an
>> initialization list?
>> Example:
>> class My_Class
>> {
>> public:
>> My_Class(istream& inp);
>> private:
>> unsigned int value;
>> };
>>
>> My_Class :: My_Class(istream& inp)
>> /* [1] */ : value(/* ??? */)
>> { ; }
>> I looked at the istream class and there is no method for
>> inputting an integer. The extraction operator is defined as a
>> non-member function.
>>
>> So, if it is possible to initialize from an istream in the
>> initialization list, what is replaces "/* ??? */" in [1] above?
>>[/color]
>
> int ReadInt(istream &is)
> {
> int i;
> is >> i;
> return i;
> }
>
> My_Class::My_Class(istream &inp) : value(ReadInt(inp)) {}
>
> Short of something like this, I don't see a way. This is of questionable
> value also, because there's no error checking. You could put error
> checking in ReadInt(), but the only thing it could really do to signal
> the error is throw an exception.
>
> -Kevin[/color]
Your suggestion appears to be less efficient than reading in the
value in the constructor:
/* [2] */
My_Class :: My_Class(istream& inp)
{
inp >> value;
}
IMHO, this is a case where assignment in the body of a constructor
is more efficient than in the initializer list.
--
Thomas Matthews
C++ newsgroup welcome message:
http://www.slack.net/~shiva/welcome.txt
C++ Faq:
http://www.parashift.com/c++-faq-lite
C Faq:
http://www.eskimo.com/~scs/c-faq/top.html
alt.comp.lang.learn.c-c++ faq:
http://www.raos.demon.uk/acllc-c++/faq.html
Other sites:
http://www.josuttis.com -- C++ STL Library book
http://www.sgi.com/tech/stl -- Standard Template Library